我有一個Java GUI應用程序,其中視圖應該提供一個功能,要求用戶選擇一個路徑。該功能應阻止,直到用戶選擇路徑(或者如果用戶取消)。InvokeAndWait返回值
由於函數不在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;
}
我的問題是如何傳遞的路徑,這是在美國東部時間範圍內選擇,以它最初叫並返回它的函數那裏。以下線路已被封鎖:
path = new PathSelector(defaultPath).getPath();
對於我的私有成員path
解決它的那一刻,但實際上我不喜歡這樣的解決方案,原因路徑是更多的是臨時變量,實際上已經無關班級本身。爲此尋找另一個解決方案,我遇到了SwingWorker
,但我無法弄清楚我能如何解決這個問題。
另一個想法是創建一個對象,它有一個字符串作爲成員與getter和setter來設置此字符串並傳遞此對象的引用,它可以設置EDT中的字符串成員並將其返回到getPath
函數返回它。
有沒有人有更流暢的解決方案?
我想你只是想要一個模態對話框。 https://docs.oracle.com/javase/tutorial/uiswing/components/dialog.html#overview –
我的想法正如@JBNizet。例如,一個JOptionPane對此非常有用。瞭解JOptionPanes可以容納複雜的GUI,如果需要的話可以包含JPanels組件,或者如果你不喜歡在這種情況下使用它們,那麼JDialog就會是完美的。 –
'//在這裏向用戶詢問路徑如果你的意思是一個**文件**路徑,那麼使用'JFileChooser'(在@JBNizet建議的模式對話框中顯示)。 –