我有一个Java GUI应用程序,其中视图应该提供一个函数,要求用户选择一个路径。该功能应该阻塞,直到用户选择路径(或者如果用户取消)。
由于在EDT线程的上下文中没有调用该函数,我使用invokeAndWait。它看起来像这样,其中path是视图的私有成员:
private String path;
public String getPath(String defaultPath)
{
try{
SwingUtilities.invokeAndWait( () -> {
// Ask here the user for the path
path = new PathSelector(defaultPath).getPath();
}
} catch (InvocationTargetException e) {
return "";
} catch (InterruptedException e) {
return "";
}
return path;
}
我的问题是如何将在EDT上下文中选择的路径传递给最初调用的函数并将其返回到那里。以下行已经阻止:
path = new PathSelector(defaultPath).getPath();
目前我用私人成员path
解决了这个问题,但实际上我并不喜欢这个解决方案,因为路径更像是一个临时变量,实际上与类本身无关。为此寻找另一个解决方案,我遇到了SwingWorker
,但我无法弄清楚如何解决这个问题'。
另一个想法是创建一个具有字符串作为成员的对象,使用getter和setter设置此字符串并传递此对象的引用,该引用可以在EDT中设置字符串成员并将其返回到{{ 1}}函数返回它。
有没有人更流畅的解决方案?
答案 0 :(得分:0)
由于没有人提出另一种解决方案,我自己能找到的最好的解决方案是:我创建一个包含要返回的字符串的简单对象。所以我在两个任务上下文中都有一个参考,我可以使用它。我有人提出一些意见来改进这个解决方案,我已经开放了。
这是保存字符串的类。
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CREATE TABLE IF NOT EXISTS parts (part_name TEXT NOT NULL, remaining_amt INT NOT' at line 1
这是此解决方案的上述代码。
public class StringCover {
private String string = "";
public String getString() {
return string;
}
public void setString(String string) {
this.string = string;
}
}