我当前的代码如下所示:

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对象检索保存的文本。

07-24 09:49
查看更多