응용 프로그램을 헤드리스 모드로 실행 중이며 일부 실행을 위해 지정된 시간 동안 대화 상자를 표시해야합니다.Displayless.getDefault.syncExec()가 헤드리스 모드에서 올바르게 실행되지 않습니다.
위의 코드가 여러 번 호출하고 대화 상자가 나타납니다 처음됩니다
Display.getDefault().syncExec(new Runnable() {
@Override
public void run() {
//Jface Dialog code
RuntimePauseDialog dlg = new RuntimePauseDialog();
dialogResult = dlg.open();
}
});
코드 샘플. 두 번째 이후부터는 대화 상자가 나타나지 않습니다. 게다가 run()은 전혀 실행되지 않고 멈 춥니 다. syncExec() 안에 초기화 된 Runnable 잠금이 있으며 wait()를 호출합니다. 영원히 대기합니다. (Application freezes) Threads와 관련이 있다고 생각합니다.
참고 : UI 모드에서 실행할 때 동일한 코드가 대화 상자를 여러 번 표시합니다. 문제는 헤드리스 모드에서만 발생합니다.
Stackoverflow에서이 제안을 시도했지만 헤드리스 모드로 실행 중이므로 만들지 않은 Workbench가 없으므로 사용할 수 없습니다.
@ greg-449 답장을 보내 주신 데 감사의 말씀을 전합니다.하지만 두 번째 질문이 아닌 첫 번째 질문에 대해 알고 싶습니다. – Sudeep
그럴 경우 많은 디버깅이 필요합니다. 내가 사용하는 macOS에서이 코드는 전혀 실행되지 않고 '코코아 제한으로 인해 주 스레드에서 표시되어야합니다.'오류로 즉시 실패합니다. –
Display.getDefault() Java doc이 말합니다. _ "기본 디스플레이를 반환하고, 그렇지 않으면이 메서드를 호출하는 스레드가 아직없는 경우 사용자 인터페이스 스레드를 만듭니다"_ 헤드리스 모드? – Sudeep