0

こんにちは、私は着信 SMS を読もうとしていますが、このような警告が表示されます。問題のあるメソッドの呼び出し: java.lang.String.(String) が見つかりました: mypackage.MyApp$ListeningThread.run()

これが私のコードです

public class MyApp extends UiApplication {
//private ListeningThread listener;

public static void main(String[] args) {
    MyApp theApp = new MyApp();
    theApp.enterEventDispatcher();
}

public MyApp() {
    invokeAndWait(new Runnable() {

        public void run() {             

        ListeningThread listener = new ListeningThread();
        listener.start();

        }
    });
    pushScreen(new MyScreen());
}

private static class ListeningThread extends Thread {
    private boolean _stop = false;
    private DatagramConnection _dc;

    public synchronized void stop() {
        _stop = true;
        try {
            _dc.close(); // Close the connection so the thread returns.
        } catch (IOException e) {
            System.err.println(e.toString());
        }
    }

    public void run() {
        try {
            _dc = (DatagramConnection) Connector.open("sms://");
            for (;;) {
                if (_stop) {
                    return;
                }
                Datagram d = _dc.newDatagram(_dc.getMaximumLength());
                _dc.receive(d);
                String address = new String(d.getAddress());
                String msg = new String(d.getData());
                if(msg.startsWith("START")){
                    Dialog.alert("hello");
                }
                System.out.println("Message received: " + msg);
                System.out.println("From: " + address);
                System.exit(0);
            }
        } catch (IOException e) {
            System.err.println(e.toString());
        }
    }
}

}

私が間違っているところを修正してください。ブラックベリーで着信 SMS コンテンツを読み取るためのコードを教えてください。

4

2 に答える 2

0

コードに関するいくつかのポイント:

  • スレッドを起動するためのそのinvokeAndWait呼び出しは意味がありません。害はありませんが、一種の無駄です。このメソッドは、UI 関連の操作を実行する場合にのみ使用してください。
  • のパラメータとして「sms://:0」を使用してみてくださいConnector.opendocsによると、フォームのパラメーター{protocol}://[{host}]:[{port}]はクライアントモードで接続を開きますが(受信側にいるため、これは理にかなっています)、ホスト部分を含めないとサーバーモードで開きます。
  • 最後に、うまくいかない場合は、このチュートリアルで指定されている 3 番目の方法を代わりに使用できます。
于 2012-06-05T08:39:43.587 に答える
0

引用したエラーは、文字列引数を取る String コンストラクターの使用について不平を言っています。Java-ME では文字列は不変なので、これはもったいないことです。引数文字列を直接使用できます。

問題のあるメソッドの呼び出し: java.lang.String.(String) が見つかりました: mypackage.MyApp$ListeningThread.run()

//String address = new String(d.getAddress());
String address = d.getAddress();
// getData() returns a byte[], so this is a different constructor
// However, this leaves the character encoding unspecified, so it
// will default to cp1252, which may not be what you want
String msg = new String(d.getData());
于 2012-06-07T17:25:04.707 に答える