0

嗨朋友们,我正在尝试阅读传入的短信,但收到这样的警告。调用有问题的方法: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());
        }
    }
}

}

请纠正我的错误。是否可以给我一些代码来读取黑莓中传入的短信内容。

4

2 回答 2

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 回答
0

关于您的代码的几点:

  • 启动线程invokeAndWait的调用没有意义。没坏处,就是有点浪费。仅使用该方法执行 UI 相关操作。
  • 您应该尝试使用“sms://:0”作为Connector.open. 根据文档,带有表单的参数{protocol}://[{host}]:[{port}]将以客户端模式打开连接(这是有道理的,因为您在接收部分),而不包括主机部分将以服务器模式打开它。
  • 最后,如果你不能让它工作,你可以使用本教程中指定的第三种方法,你可能已经阅读过。
于 2012-06-05T08:39:43.587 回答