2013-05-07 2 views
1

클래스 (내 경우 Synchronization.java) 정적 메서드과 서버간에 데이터를 업로드/다운로드하는 중입니다. 경우에 따라 (JavaFX) MessageDialog (MessageBox)를 열고 특정 활동을 수행 할 것인지 묻는 메시지를 표시합니다 (대답 : 예/아니요). 이 MessageDialog를 열려면 메인 윈도우와 스테이지에서 컨트롤러가 필요합니다. 또한, 내가 다른 스레드에있는 것처럼 나는 Platform#runlater와 UI 스레드에서 MessageBox를 열 수 있습니다. Synchronization.java는 (다른 스레드에 있음)에서 사용자의 응답을 얻을 때까지 기다려야합니다. 즉, 사용자로부터 응답을받은 후에 해당 메서드를 호출해야합니다. 다른 스레드에서 Messagebox의 응답을 기다리십시오.

편집 : 답변으로 추가 한 해결책을 찾았습니다. 그러나, 나는 이것이 내 문제에 대한 최선의 해결책이라고 완전히 확신하지 못한다. 누구든지 의견이 있으면 공유해 주셔서 감사합니다!

+0

어떻게 문제를 해결하려고 했습니까? 어디서 붙어 있니? –

+0

나는 위에서 설명한 두 가지 제안을 시도했다. 둘 다 나에게 매우 부적절하게 보이고 실제로 작동하지 않았다 ... 나는 내가 현재 시도하고있는 것을 설명하기 위해 위의 스레드를 업데이트했다. 감사. – casaout

+0

문제를 보여줄 수있는 코드를 제공하면 도움이 될 것입니다. –

답변

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; 
    } 
} 
관련 문제