我当前的代码如下所示:
final String[] value = new String[1];
SwingUtilities.invokeAndWait(new Runnable() {
public void run() {
value[0] = textArea.getText();
}
});
使用最终数组似乎有点麻烦。有没有更优雅的解决方案?
我已经进行了很多搜索,但似乎找不到任何可以执行此操作的方法,这让我感到惊讶。尽管我不断遇到
SwingWorker
,但是我不确定在这种情况下是否合适?我假设
JTextArea.getText()
不是线程安全的。谢谢。
最佳答案
所有问题都可以通过添加另一层间接寻址来解决(除非您有太多的:P层)。
public class TextSaver implements Runnable
{
private final JTextArea textArea;
private final ObjectToSaveText saveHere;
public TextSaver(JTextArea textArea, ObjectToSaveText saveHere)
{
this.textArea = textArea;
this.saveHere = saveHere;
}
@Override
public void run()
{
saveHere.save(textArea.getText());
}
}
我不打算提供ObjectToSaveText的代码,但是您知道了。
然后,您的SwingUtilties调用将变为:
SwingUtilities.invokeAndWait(new TextSaver(textArea, saveHere));
您可以从saveHere对象检索保存的文本。