我是編程新手,我需要這個小障礙幫助。我正在製作一個簡單的聊天程序,有一臺服務器和一個聊天客戶端。所以我的客戶端啓動,並創建一個網絡連接就好了,其中包括一個PrintWriter
發送到我的服務器。然後,在另一個類(我的ActionListener
)中,當我調用writer變量時,它會以NullPointerException
結束。我的PrintWriter的值在不同的類中使用時無效
所以我嘗試每次運行ActionListener時都調用setupnetworking,但是他們最終會連接到多個連接,並且我的消息會多次打印出來。我可以在我的main()
方法中保持設置網絡狀態,併爲我的ActionListener
類保留變量值PrintWriter
。如果我很困惑,我很抱歉,所以請看看我的代碼並告訴我你的想法。
這裏就是整個節目......
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");
}
}
}
}
P.S我有一個GUI程序這一點。這只是建立了連接。
你怎麼知道它是空的作家 - 你有沒有在調試器中加入或者添加了一個轉儲到System.out? – mdma 2011-04-19 23:52:14
是的,我有,這只是一個沒有一堆的版本System.out.print – 2011-04-19 23:56:50
它是否打印'「網絡建立...」'? – 2011-04-20 00:37:57