我想在java中創建一個簡單的客戶端/服務器應用程序,它有一個主要啓動線程 - 偵聽器線程和可運行 - 發送器線程。 他們與一個工作程序進行通信。 套接字是在偵聽器線程上創建的,就像輸入和輸出靜態變量一樣。爲什麼在寫入到另一個線程定義的套接字輸出時會出現(java)NullPointerException異常?
問題是: 我可以使用輸出,但只有當我從它定義的偵聽器線程中調用它時。 (output.writeBytes(「0000」);) 當我嘗試從發件人runnable調用它時,我得到一個空異常! (InfoListener.output.writeBytes( 「0000」);)
這裏是我的(沒有那麼聰明)的代碼,沒有所有的異常處理:
* InfoListener.java文件*
public class InfoListener extends Thread {
public int port = 5000;
public Socket socket = null;
static BufferedReader input;
static DataOutputStream output;
static boolean can_start_sender = false;
static boolean active = true;
static String answer="";
public void run()
{
// init socket
socket = new Socket("127.0.0.1", port);
output = new DataOutputStream(socket.getOutputStream());
input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
can_start_sender = true;
while (active) // while main app is active
{
// Read new data!!
answer = input.readLine();
if (answer!=null)
{
System.out.println("Info : Listener received : " + answer);
}
}
}
}
* InfoSender.java文件*
public class InfoSender implements Runnable {
static InfoListener infoListener;
static InfoSender infoSender;
static String string_to_send = "0000";
public static void main(String[] args)
{
// start listener
infoListener = new InfoListener();
infoListener.start();
// Start Sender
infoSender = new InfoSender();
infoSender.run();
while (infoListener.isAlive())
Thread.sleep(100);
}
public void run()
{
//attempt to connect to the server and send string
// Wait for socket
while (InfoListener.can_start_sender = false)
Thread.sleep(100);
// write -------- HERE IS THE NULLPOINTEREXCEPTION ------------
InfoListener.output.writeBytes(string_to_send);
System.out.println("Info : info sent :"+ string_to_send);
// wait a bit for listener to get response back, then close
Thread.sleep(10000);
InfoListener.active = false;
}
}
請幫助: |
這些字段都不應該是靜態的。 – EJP