Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.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 swing从不同线程的JTextField获取值_Java_Multithreading_Swing - Fatal编程技术网

java swing从不同线程的JTextField获取值

java swing从不同线程的JTextField获取值,java,multithreading,swing,Java,Multithreading,Swing,我知道如果我需要从不同的线程更改JTextField值,我需要使用SwingUtilities.invokeLater()调用。但是如果我需要从另一个线程获取该值,我可以只使用textfield.getText()还是需要使用某种invokeLater调用?谢谢。如果您认为getText()调用的结果可能是不确定的(即无序的),那么可以使用不同的线程来获取值。即使像getText()这样简单的东西也应该从事件调度线程中调用 如果您在另一个线程中,可以使用: 在什么情况下可以不确定?如果在调用之间

我知道如果我需要从不同的线程更改
JTextField
值,我需要使用
SwingUtilities.invokeLater()
调用。但是如果我需要从另一个线程获取该值,我可以只使用
textfield.getText()
还是需要使用某种
invokeLater
调用?谢谢。

如果您认为getText()调用的结果可能是不确定的(即无序的),那么可以使用不同的线程来获取值。

即使像getText()这样简单的东西也应该从事件调度线程中调用

如果您在另一个线程中,可以使用:


在什么情况下可以不确定?如果在调用之间更改?当您使用多线程时,您无法确定何时调用方法/过程,何时完成它们,或者在执行读取操作时取消“写入”/“修改”的对象将处于何种状态。调用getText()时可能发生的更改包括更改JTextfield的文档、文档内容、光标位置等,但是。。。由于字符串在Java中是不可变的,如果您所关心的只是getText(),那么就可以保证它是线程安全的,同样,由于字符串的不可变性OK,那么您建议怎么做?
final String[] textHolder = { null };

EventQueue.invokeAndWait(new Runnable() {
    @Override
    public void run() {
        textHolder[0] = someTextField.getText();
    }
});

String text = textHolder[0];