0

以下代码侦听传入的短信,从短信中取出所有空格,然后通过电子邮件发送编辑过的短信。一切正常,除了应用程序无法发送电子邮件。谁能看到我做错了什么并帮助我?

new Thread() { 
    public void run() {

        try {

            DatagramConnection _dc =
                (DatagramConnection)Connector.open("sms://"); 

            for(;;) { //'For-Loop' used to listen continously for incoming sms's

                Datagram d = _dc.newDatagram(_dc.getMaximumLength());                     
                _dc.receive(d);  //The sms is received                           
                byte[] bytes = d.getData();
                String address = d.getAddress(); //The address of the sms is put on a string.
                String msg = new String(bytes); //The body of the sms is put on a string.
                String msg2 = (replaceAll(msg, " ",""))  ; //


                Store store = Session.getDefaultInstance().getStore();

                Folder[] folders = store.list(Folder.SENT); 
                Folder sentfolder = folders[0]; //Retrieve the sent folder 

                Message in = new Message(sentfolder); 
                Address recipients[] = new Address[1];  

                recipients[0]= new Address("me@yahoo.com", "user"); 

                in.addRecipients(Message.RecipientType.TO, recipients); 

                in.setSubject("Incoming SMS"); //The subject of the message is added
                in.setContent("You have just received an SMS from: " + address + "/n" + "Message: " + msg2); //Here the body of the message is formed

                in.setPriority(Message.Priority.HIGH); //The priority of the message is set.

                Transport.send(in); //The message is sent

                in.setFlag(Message.Flag.OPENED, true);
                Folder folder = in.getFolder(); //The message is deleted from the sent folder
                folder.deleteMessage(in); 
            }       

        }catch (Exception me) { //All Exceptions are caught       
        }    
    }
};

public static String replaceAll(String front, String pattern, String back) {

    if (front == null) 
    return "";

    StringBuffer sb = new StringBuffer(); //A StringBufffer is created
    int idx = -1;
    int patIdx = 0;

    while ((idx = front.indexOf(pattern, patIdx)) != -1) {
        sb.append(front.substring(patIdx, idx));
        sb.append(back);
        patIdx = idx + pattern.length();
    }

    sb.append(front.substring(patIdx));
    return sb.toString();
}

谢谢

4

1 回答 1

0

这并不是问题的真正答案,只是对我上面评论的详细说明,这可能会有所帮助。

确保在你的异常捕获块中做一些事情,这样代码中的问题就不会被忽视。有可能您的代码没有遇到任何异常,但是为了让我们提供帮助,我们需要尝试消除潜在的问题,并且由于您说代码不起作用,但是您有一个空的异常处理程序,这很容易首先修复的区域。

最简单的处理程序就是:

try {
   // try sending sms here
} catch (Exception e) {
   e.printStackTrace();
}

如果您可以在调试器中运行它(我强烈建议这样做),那么您现在可以在该e.printStackTrace()行上放置一个断点,看看它是否会被命中。如果是,请检查它的值e并告诉我们它是什么。

通常,在我的程序中,我实际上并没有e.printStackTrace()在 catch 处理程序中使用,但我有一个记录类,它接受字符串,可能还有一个日志级别(例如信息、警告、错误、详细),并写入日志文件。日志文件可以附加到用户发送给技术支持的电子邮件中,或者如果您只想在开发时使用该功能,则可以将其禁用用于生产。

无论如何,从一个简单的开始printStackTrace(),看看它是否会被击中。然后,回来汇报。


编辑:从您在问题后评论中描述的症状来看,似乎有可能

 String msg2 = (replaceAll(msg, " ",""))  ; //  

正在引发异常,因此永远不会让您到达发送电子邮件的位置。在初步检查时,我看不出您的实施有任何问题replaceAll(),但这可能是一个值得一看的地方。该实现是否已经过彻底的单元测试?

另外,我认为您"/n"的代码中有 a ,您可能想要 a "\n",对吗?

于 2012-07-21T23:33:18.143 回答