因此,这确实很烦人,并且同时进行了令人难以置信的魔术表演。因此,我有一个名为setAnagram的全局字符串。我正在用Eclipse创建GUI,因此我想做的是让用户单击一个按钮,它启动另一个线程,并在该线程上获取文本字段的值。我这样做的方法是将setAnagram设置为文本字段的值。

但是,这实际上不起作用,并且setAnagram具有空白值(“”)。因此,我想好了,如果将变量设置为null,该怎么办。好吧,我得到了NullPointerException。

我想很好,如果变量实际上没有更改,并且在可以更改变量之前启动了线程,该怎么办?好吧,我做到了,所以您一次按下按钮并对其进行更改,然后再次按下它,然后启动线程。这是奇怪的东西出现的地方。更改后,我在第一次单击按钮时打印出setAnagram的值。但是,当我在单击下一个按钮时启动线程时,它又回到了初始化时的状态(“测试”)。这是按钮单击的代码:

decodeAnagramButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
        if (buttonPresses == 0) {
            setAnagram = chosenAnagram.getText(); // chosenAnagram is the text field
            buttonPresses++;
            decodeAnagramButton.setText("Click again");
            System.out.println(setAnagram); // These two lines output the same thing
            System.out.println(chosenAnagram.getText());
        }
        else {
            titleText.setText("Decoding anagram...");
            decodeAnagramButton.setVisible(false);
            MainWindow thread = new MainWindow();
            thread.start();
        }
    }
});


然后为了最小化,我不会添加线程代码,因为它有点长,只知道对setAnagram所做的就是获取值。关于为什么这种情况发生意外变化的任何想法?

最佳答案

        MainWindow thread = new MainWindow();
        thread.start();



所以...您创建了MainWindow的新实例(显然是线程?!?)。这意味着MainWindow的新实例也有其自己的setAnagram成员变量,对吗?

尝试在这两行代码之间添加thread.setAnagram = this.setAnagram;

(此外,关于您的设计的一些气味令人讨厌,为什么您的主窗口是螺纹?)

10-06 13:51