Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法更新线程中gobal变量的值_Java_Netbeans 7_Smslib - Fatal编程技术网

Java 无法更新线程中gobal变量的值

Java 无法更新线程中gobal变量的值,java,netbeans-7,smslib,Java,Netbeans 7,Smslib,我无法更新线程连续调用的函数中全局变量的值 功能代码为: public void readMessages() { if (srv.getServiceStatus() == Service.ServiceStatus.STARTED) { try { InboundMessage msg = null; java.util.LinkedList<InboundMessage> list = new java.u

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

功能代码为:

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();
        }
    }
}

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

由于您从线程调用此方法,因此变量没有得到更新有两个原因

  • readMessages()中的代码可能会在更新变量之前引发任何异常
  • 变量可能永远不会更新,因为它位于if块内。检查它的初始值,以便它可以通过if条件

  • 变量是否声明为
    volatile
    ?在块中添加一些日志记录,在块中增加
    noOfSms
    ,以查看是否执行了代码。看起来有很多条件(
    list
    不为空,值小于
    4
    ,等等…`)必须满足才能增加值。@alegen不,不是,我通过调试检查过值没有变化!!
    public void run(){
        while (true){
            readMessages();
    
            try {
                t.sleep(5000);
                user_status=2;
            } catch (InterruptedException e) {
                System.out.println("Thread Pause Exception");
            }
        }
    }