Java变量不受影响

时间:2017-02-28 03:57:17

标签: java eclipse variables

现在这可能听起来像是一个以前重复过多次的问题,但是我已经和那些有其他理由解决这个问题的人做了一天的研究。

我有一个函数读取保存文件的一部分,并且显示它确实收到了正确的数据。所以错误是整数变量完全忽略了新变量并且在实时调试器中没有显示任何变化,所以像许多其他帖子一样,它不仅仅是一个重复的对象错误。我似乎无法确定这里的主要问题是什么,这是阻碍我的最后一件大事。任何帮助都会很棒,如果我确实在互联网上错过了一个关于此主题的话,我非常抱歉。

失败的代码:

@Override
public void read(List<String> data) {
    //world positions are not being changed at all

    System.out.println(data.get(1)); 
    int test = Integer.valueOf(data.get(1).replaceAll("[^\\d.]", ""));
    worldXPos = Integer.valueOf(data.get(0).replaceAll("[^\\d.]", ""));
    worldZPos = test;
}   

另一个提供数据的类:

public void readSaveFunctions(){
    if(!gameSaves.exists()){
        gameSaves.mkdir();
    }
    String currentLine;
    try {
        List<String> data = new ArrayList<String>();
        FileReader read = new FileReader(currentFile);
        BufferedReader reader = new BufferedReader(read);

        String key = "";
        while((currentLine = reader.readLine()) != null){
            if(currentLine.contains("#")){
                key = currentLine;
                data = new ArrayList<String>();
            }else if(currentLine.contains("*end")){
                for(int i = 0; i < saves.length; i++){
                    String tryKey = "#" + saves[i].IDName();
                    if(tryKey.equals(key)){
                        key = "";
                        saves[i].read(data);
                    }
                }
            }else data.add(currentLine);
        }
        reader.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

解释它的另一种方式是: 调试器设置为步进模式,所以我看到每一行以人的速度执行,然后我得到一条这样的行,但所有设置变量的行都有相同的效果:

worldXPos = Integer.valueOf(data.get(0).replaceAll("[^\\d.]", ""));

并且调试器显示具有不同数字的两个整数,但是当线路经过后,即时类变量保持完全相同而在调试器中没有任何效果。

更新: 我忘了提到这个方法有一个@override方法,似乎这个@override可能会导致这个问题,现在终于我可能有一条路可以再次关注

1 个答案:

答案 0 :(得分:0)

所以我找到了答案:AWT线程设法激活从另一个类调用方法,该方法在读取之前更改了整数。起初我确实关闭了,因为调试器只显示了其中一个线程而无法知道另一个线程正在积极地将其更改为早期。感谢所有帮助:P。