我有一个 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();
目前我用 private member 解决了它path
,但实际上我不喜欢这个解决方案,因为 path 更像是一个临时变量,实际上与类本身无关。在为此寻找另一种解决方案时,我遇到了,SwingWorker
但我不知道如何解决我的“问题”。
另一个想法可能是创建一个对象,该对象具有一个字符串作为成员,getter 和 setter 设置此字符串并传递此对象的引用,该对象可以在 EDT 中设置字符串成员并将其返回到getPath
函数中以返回它。
有没有人更流畅的解决方案?