2013-05-07 85 views
1

其他線程的答案我有靜態方法往返於服務器上傳/下載一些數據的工作(Synchronization.java在我的情況)。在某些情況下,我想開一個(的JavaFX)MessageDialog(MessageBox中),並詢問用戶是否他想要做某一活動或沒有(答案:是/否)。要打開這個MessageDialog,我需要主窗口和舞臺上的控制器。此外,因爲我在另一個線程上,我可以在UI線程中使用Platform#runlater打開MessageBox。該Synchronization.java應該等到我從MessageDialog(這是在其他線程)用戶的響應 - 即後我得到用戶的響應,相應的方法被調用。等待從消息框

編輯:我發現,我加入一個答案的解決方案。但是,我並不完全相信這是解決我的問題的最佳解決方案。如果有人有建議,謝謝分享!

+0

你是如何解決這個問題的?你卡在哪裏? – 2013-05-07 11:24:43

+0

我嘗試了上述兩種建議。這兩個看起來非常不恰當的我,並沒有真正的工作......我更新上面的線程來形容我目前嘗試。謝謝。 – casaout 2013-05-07 11:30:51

+0

它會更容易幫助你,如果你提供的一些代碼來顯示您的問題 – 2013-05-07 11:31:42

回答

1

我用下面的代碼解決了它。這有效,但我有感覺,有更好的方法...

public static boolean showMessageCheckToUpload() { 
    @SuppressWarnings({ "unchecked", "rawtypes" }) 
    final FutureTask query = new FutureTask(new Callable() { 
     @Override 
     public Object call() throws Exception { 
     boolean uploadDisk = MessageBoxTwoChoicesController.showDialogBox(
        stage, "Upload disk", 
        "Do you want to upload the current Disk to the server?", "Yes", "No"); 
     return uploadDisk; 
     } 
    }); 
    Platform.runLater(query); 
    try { 
     return (boolean) query.get(); 
    } catch (InterruptedException | ExecutionException e) { 
     return false; 
    } 
}