2つのクラスを作成しました。最初のクラスは、クライアントからのソケット接続を待機して受け入れるスレッドを実行するサーバークラスです。
2番目のクラスは、ソケット接続によって渡されたテキストメッセージを取得する新しいスレッドを開始するEchoThreadクラスです。これは、一度に複数のクライアントをサーバーに接続できるようにするために、これを行う必要があるためです。そこで、このクラスを作成しました。サーバークラスのwhile(true)ループで呼び出され、接続が確立されたときに新しいスレッドを開始します。
問題は、このアプリのlogcatがEchoThreadクラスのnullPointer例外であるということです。次の行にあります。
handler.post(new Runnable() {
このエラーメッセージが表示されるのはなぜですか?
サーバークラス:
public class ServerThread implements Runnable {
public void run() {
try {
if (SERVERIP != null) {
handler.post(new Runnable() {
@Override
public void run() {
serverStatus = "Listening on IP: " + SERVERIP;
}
});
serverSocket = new ServerSocket(SERVERPORT);
while (true) {
// listen for incoming clients
Socket client = serverSocket.accept();
handler.post(new Runnable() {
@Override
public void run() {
Intent intent = new Intent();
intent.setAction("com.example.diceRolled");
intent.putExtra("serverStatus","Connected");
sendBroadcast(intent);
}
});
new EchoThread(Server.this, client).start();
} // end while(true) method
} else { // the rest of the code for Server class....
EchoThreadクラス:
public class EchoThread extends Thread {
protected Socket socket;
private String line;
private Handler handler;
private Context context;
private Socket client;
public EchoThread(Context c, Socket clientSocket) {
this.socket = clientSocket;
this.context = c;
}
public void run(){
try {
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
while ((line = in.readLine()) != null) {
// Log.d("ServerActivity", line);
handler.post(new Runnable() {
private String receivedCommand;
@Override
public void run() {
receivedCommand = line;
Intent intent = new Intent();
intent.setAction("com.example.diceRolled");
intent.putExtra("serverStatus", line.trim());
context.sendBroadcast(intent);
Toast.makeText(context, "sent message " + receivedCommand, Toast.LENGTH_SHORT).show();
// the rest of the code for EchoThread class....