Im struggling to change this segment from requiring a server address hard coded to using
private static inetAddress host;
Here is the code
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.util.ArrayList;
import java.util.Scanner;
import javax.swing.*;
public class ChatClient extends JFrame {
private JFrame chatFrame = new JFrame("Welcome To The Chat Room");
private JFrame loginFrame;
private JButton sendBtn, exitBtn;
private JTextField typingArea;
private JTextArea inRoom;
private JTextArea chatBox;
private JTextField loginInput;
private static String username, entry;
private static InetAddress host;
public static ArrayList<String> usersList = new ArrayList<>();
BufferedReader networkInput;
PrintWriter networkOutput;
public void loginDisplay() throws Exception {
chatFrame.setVisible(false);
loginFrame = new JFrame("Welcome User!");
loginInput = new JTextField(15);
JLabel usernameLabel = new JLabel("Pick a username:");
JButton joinServer = new JButton("Enter Chat Server");
joinServer.addActionListener(new loginBtnClick());
JPanel loginPanel = new JPanel();
loginPanel.add(usernameLabel);
loginPanel.add(loginInput);
loginFrame.add(BorderLayout.CENTER, loginPanel);
loginFrame.add(BorderLayout.SOUTH, joinServer);
loginFrame.setSize(300, 300);
loginFrame.setVisible(true);
}
public void display() throws IOException {
JPanel mainPanel = new JPanel();
mainPanel.setLayout(new BorderLayout());
JPanel southPanel = new JPanel();
southPanel.setLayout(new GridBagLayout());
typingArea = new JTextField(40);
sendBtn = new JButton("Send Your Message");
sendBtn.addActionListener(new sendBtnClick());
chatBox = new JTextArea();
chatBox.setEditable(false);
chatBox.setLineWrap(true);
inRoom = new JTextArea();
inRoom.setEditable(false);
inRoom.setLineWrap(false);
inRoom.setSize(150, 300);
inRoom.append("Users in Room: \n");
mainPanel.add(new JScrollPane(chatBox));
mainPanel.add(new JScrollPane(inRoom), BorderLayout.WEST);
southPanel.add(typingArea);
southPanel.add(sendBtn);
mainPanel.add(BorderLayout.SOUTH, southPanel);
chatFrame.add(mainPanel);
chatFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
chatFrame.setSize(470, 350);
chatFrame.setVisible(true);
//chatFrame.setResizable(false);
}
//private String getServerAddress() {
// return "127.0.0.1";
//}
private class loginBtnClick implements ActionListener {
public void actionPerformed(ActionEvent event) {
username = loginInput.getText();
if (username.length() < 1) {
System.out.println("Invalid Username");
JOptionPane.showMessageDialog(null, "Invalid Username");
//message to server and user error username
} else {
loginFrame.setVisible(false);
networkOutput.println(loginInput.getText());
try {
display();
} catch (Exception e) {
System.out.println(e);
System.exit(1);
}
}
}
}
private class sendBtnClick implements ActionListener {
public void actionPerformed(ActionEvent event) {
if (typingArea.getText().length() < 1) {
} else {
networkOutput.println(typingArea.getText());
typingArea.setText("");
}
}
}
public void run() throws IOException {
//String serverAddress = getServerAddress();
Socket socket = new Socket(host, 1237);
networkInput = new BufferedReader(new InputStreamReader(socket.getInputStream()));
networkOutput = new PrintWriter(socket.getOutputStream(), true);
while (true) {
String line = networkInput.readLine();
if (line.startsWith("NAMESENT ")) {
if (username != null) {
networkOutput.println(username);
}
} else if (line.startsWith("NAMEACCEPTED")) {
} else if (line.startsWith("MESSAGE")) {
chatBox.append(line.substring(8) + "\n");
} else if (line.startsWith("LIST")) {
if (!usersList.contains(line.substring(5))) {
usersList.add(line.substring(5));
inRoom.append(line.substring(5) + "\n");
}
} else if (line.startsWith("SPECMSG")) {
if (line.substring(8).startsWith(username)) {
chatBox.append(line.substring(9 + username.length()));
}
} else if (line.startsWith("DISCONNECT")) {
chatBox.append(line.substring(10) + " has disconnected.");
}
}
}
public static void main(String[] args) {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {
e.printStackTrace();
}
ChatClient chat = new ChatClient();
try {
chat.loginDisplay();
chat.run();
} catch (Exception e) {
}
}
In the past i have had it as simple as this but i cant get it to be happy with it
private static void sendMessages()
throws ClassNotFoundException {
final int PORT = 1239;
String entry;
try {
socket = new Socket(host, PORT);
EDIT
I want to get the top code to not say
socket = new Socket(ServerAddress, 1237)
i want it to say
socket = new Socket(host, PORT);
EDIT 2
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at ChatClient$loginBtnClick.actionPerformed(ChatClient.java:106)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)