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];