字符串切换回上一个值

时间:2018-08-29 20:32:53

标签: java string multithreading user-interface

所以,这确实很烦人,并且同时进行了一场不可思议的魔术表演。因此,我有一个名为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所做的就是获取值。为什么这会发生意外变化的任何想法?

1 个答案:

答案 0 :(得分:1)

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

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

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

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