1

私は自分の電話で SocketServer を動作させようとしています。最近 ICS にアップグレードしたので、慣れていない別のスレッドでネットワーク処理を行う必要があります。いくつかのコードを書きましたが、ソケットに接続しようとするとすぐにアプリがクラッシュします。

トグル オン/オフ スイッチが切り替えられると、serverSocket を開始します。

final Switch connectionSwitch = (Switch) findViewById(R.id.connectionSwitch);
connectionSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
    if(isChecked) {
        new Thread(){
            public void run() {
                try {
                    serverSocket = new ServerSocket(port);
                    socket = serverSocket.accept();
                    outToServer = new DataOutputStream(socket.getOutputStream());
                } catch (UnknownHostException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }

                while(connectionSwitch.isChecked()) {

                    myPacket[0] = (byte) 0xAA;
                    myPacket[1] = (byte) 0x01;
                    myPacket[2] = (byte) (fanFrontSpeed/256);
                    myPacket[3] = (byte) (fanFrontSpeed%256);
                    myPacket[4] = (byte) (fanLeftSpeed/256);
                    myPacket[5] = (byte) (fanLeftSpeed%256);
                    myPacket[6] = (byte) (fanRightSpeed/256);
                    myPacket[7] = (byte) (fanRightSpeed%256);

                    try {
                        outToServer.write(myPacket,0,8);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }

                try {
                    socket.close();
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
            }
        }.start();
    }
}
});

私が得るエラーは次のとおりです。

FATAL EXCEPTION: Thread-4487
java.lang.NullPointerException
4

1 に答える 1

0

このようなものをデバッグする最も簡単な方法は、デバッガーで段階的に進み、各行を実行する前に何かが null かどうかを確認することです。

たとえば、サーバーの初期化中に何らかのエラーが発生し、それが UnknownHostException または IOException でキャッチされます。コードは初期化されていないため outToServer==null を含むものを実行し、試行するたびoutToServer.write(myPacket,0,8);にヌル ポインター例外が発生します。 .

しかし、それは何十億もの異なるものかもしれません。それは私が考えることができる最も明白なものです.

于 2012-08-14T08:56:22.387 に答える