0

我无法更新由线程连续调用的函数中的全局变量的值

功能代码为:

public void readMessages()
{
    if (srv.getServiceStatus() == Service.ServiceStatus.STARTED) {
        try {
            InboundMessage msg = null;
            java.util.LinkedList<InboundMessage> list = new java.util.LinkedList<InboundMessage>();
            srv.readMessages(list, InboundMessage.MessageClasses.UNREAD);

            int checkArray = list.size();

            for (int i = 0; i < list.size(); i++) {
                msg = list.get(i);
                System.out.println("New incoming message from: " + msg.getOriginator() +" : \t" + msg.getText() + "\n");
                saveSMS(msg.getOriginator(),msg.getText());

                if (checkArray == 0) {
                    messageArray = new String [4];
                    for (int j = 0 ; j<4 ; j++) {
                        messageArray[j] = "";
                    }
                }                            

                if (noOfSms < 4) {
                    messageArray[noOfSms] = msg.getText();
                    noOfSms = noOfSms + 1;
                } 
                if (noOfSms == 3) {
                    Receiver r = new Receiver ();
                    r.Processing_ReceivedSMS(msg.getText(),msg,messageArray);
                }  
            }
        }
        catch(Exception e){
            e.printStackTrace();
        }
    }
}

这里noOfSms是全局变量,但它的值不会改变。

调用 readMessage 的函数是这样的:

public void run(){
    while (true){
        readMessages();

        try {
            t.sleep(5000);
            user_status=2;
        } catch (InterruptedException e) {
            System.out.println("Thread Pause Exception");
        }
    }
}

其背后的原因是什么以及如何处理?

4

1 回答 1

0

由于您从 thread/s 调用此方法,因此您的变量未更新有两个原因。

  1. readMessages() 中的代码可能会在您的变量更新之前抛出任何异常
  2. 您的变量可能永远不会更新,因为它位于 if 块内。检查它的初始值,以便它可以通过 if 条件
于 2018-11-28T12:17:31.847 回答