Я новичок в программировании, и мне нужна помощь с этим небольшим препятствием.Я делаю простую программу чата, с сервером и клиентом чата.Таким образом, мой клиент запускается и прекрасно создает сетевое соединение, которое включает PrintWriter
, который отправляет на мой сервер.Затем, в другом классе (мой ActionListener
), когда я вызываю переменную типа Writer, он заканчивается void с NullPointerException
.
Поэтому я пытался вызывать setupnetworking каждый раз, когда запускается ActionListener, но с ними у меня возникает множество подключений, и мое сообщение печатается более одного раза.Могу ли я сохранить настройки сети в моем методе main()
и сохранить значение переменной PrintWriter
для моего класса ActionListener
.Извините, если я запутался, поэтому, пожалуйста, посмотрите на мой код и скажите, что вы думаете.
Вот вся программа ...
import java.util.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.*;
import java.io.*;
import java.net.*;
public class SimpleChatClient {
BufferedReader reader;
PrintWriter writer;
Socket sock;
JTextArea chatbox = new JTextArea(10,20);
JTextField entertext = new JTextField(20);
JButton sendchat = new JButton("send");
public void go(){
setUpNetworking();
Thread readerThread1 = new Thread(new IncomingReader());
readerThread1.start();
//big probelm. to many setUpNetworkings!!!!!!!!
}
public class SendButtonListener implements ActionListener{
public void actionPerformed (ActionEvent ev){
try {
writer.println(entertext.getText());
writer.flush();
System.out.println("chat flush");
}
catch (Exception ex) {
ex.printStackTrace();
System.out.println("action fail");
}
entertext.setText("");
entertext.requestFocus();
}
}
public void setUpNetworking() {
try {
sock = new Socket("192.168.0.11", 65534);
InputStreamReader streamReader =
new InputStreamReader(sock.getInputStream());
reader = new BufferedReader(streamReader);
writer = new PrintWriter(sock.getOutputStream(), true);
System.out.println("network established. Beginning mainstream feed.");
}
catch (IOException ex) {
ex.printStackTrace();
System.out.println("setup fail");
}
}
public class IncomingReader implements Runnable {
public void run() {
String message;
try {
while ((message = reader.readLine()) != null) {
System.out.println("read " + message);
chatbox.append(message + "\n");
chatbox.append("\n");
}
}catch (Exception ex) {
ex.printStackTrace();
System.out.println("run fail");
}
}
}
}
Ps У меня есть графический интерфейсПрограмма для этого тоже.Это просто устанавливает соединение.