0

Android のライブラリを使用して端末エミュレータに接続しようとしています。これはシリアル デバイスに接続され、送受信されたデータが表示されます。端末セッションにアタッチするには、入力ストリームを setTermIn(InputStream) に、出力ストリームを setTermOut(OutputStream) に提供する必要があります。

ただし、ストリームを次のように宣言すると、デフォルトで null になりますね。

private OutputStream bos;
private InputStream bis;

...

//inside onCreate() method
session.setTermIn(bis);
session.setTermOut(bos);
/* Attach the TermSession to the EmulatorView. */
mEmulatorView.attachSession(session)

したがって、ストリームをセッションにアタッチしようとすると、エラーが発生します。

FATAL EXCEPTION: TermSession input reader
java.lang.NullPointerException at jackpal.androidterm.emulatorview.TermSession$2.run(TermSession.java:137)

これは、ライブラリ内の次のコードを指しています。

public void run()
{
    try
    {
        while (true)
        {
            int read = mTermIn.read(mBuffer);
            if (read == -1)
            {
                // EOF -- process exited
                return;
            }
            mByteQueue.write(mBuffer, 0, read);
            mMsgHandler.sendMessage(mMsgHandler.obtainMessage(NEW_INPUT));
        }
    }
    catch (IOException e)
    {
    }
    catch (InterruptedException e)
    {
    }
}

これは、まだデータの送受信を開始していないため、データをストリームに割り当てていないためです。スプリアス データを設定してストリームに割り当てるにはどうすればよいですか? 私はそれを試しましたが、それでも文句を言います。おそらく私はそれを間違っています。

データを送受信するには、次のメソッドがありますが、それらを呼び出すたびにストリームを設定する必要はないと思います。

シリアル経由でデータを送信してストリームを設定するメソッドをオーバーライドすると、Enter キーを押すたびに実行されます。

public void sendData(byte[] data)
{
    bos = new ByteArrayOutputStream(data.length);
}

データが受信されるたびに実行されます。

public void onDataReceived(int id, byte[] data) 
{
    bis = new ByteArrayInputStream(data);
}

これらを正しく初期化するにはどうすればよいですか? また、データを送受信するたびにストリームを設定する必要がありますか?それは問題ですか? それとも、私はいくつかのチェックを行う必要がありますか?

4

1 に答える 1

1

使用する前に初期bis化する必要がありますbos

これらの2行を使用する直前に置くことができます

session.setTermIn(bis);
session.setTermOut(bos);
于 2012-12-13T16:44:45.827 に答える