대규모 SWT 기반 응용 프로그램에서 작업 AWT/Swing 브리지를 사용하여 일부 코드를 우연히 발견하여 두 개의 GUI 스레드를 사용하는 의미에 대해 생각하게했습니다. 당신이 스윙 요소를 많이 짐작으로, 세부 사항으로하지 않고SWT와 AWT/Swing 결합 : 어떤 GUI 스레드를 사용할 수 있습니까?
public void createContent(final String html) {
// Bridge to AWT
frame = SWT_AWT.new_Frame(this);
rootPane = new JPanel();
rootPane.setLayout(new GridBagLayout());
JRootPane rp = new JRootPane();
rp.getContentPane().add(rootPane);
rp.validate();
frame.add(rp);
frame.validate();
// Create components in AWT user interface thread (deadlock prevention)
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
initializeLookAndFeel();
initializeToolbar();
initializeHTMLEditor();
setHTML(html, false);
}
});
rootPane.repaint();
rootPane.validate();
}
초기화 방법 내부의 "다리 프레임"에 추가됩니다.
이 경우 나를 혼란스럽게하는 것은 Swing 구성 요소 생성을위한 AWT 이벤트 발송자 스레드 (EDT) 호출입니다. SWT UI 스레드 안에 모든 GUI 요소를 추가했을뿐입니다. 왜 두 스레드간에 GUI 작성을 분할하는 것이 바람직한 지 잘 모르겠습니다.
아마 누군가는 장면 뒤에서 일어나는 일에 대해 자세히 설명 할 수 있습니다. 특히 다리를 사용하여 두 스레드의 상호 작용에. 코드 예제 에서처럼 EDT에 AWT 항목 작성을 전달하는 것이 왜 또는 언제 필요합니까?
에서
Display.syncExec(....)
또는Display.asyncExec(....)
및 SWING들 중 하나와 함께 적절한 스레드 내에서 SWT 것들을 처리하는 모든 위젯을 호출하는 내 어머니는 내가 어렸을 때하지 말아야 할 말한 것들 중 하나입니다이 ... –+ 70k 라인 레거시 프로젝트에 대한 한 사람의 쇼이기 때문에 그것에 대해 논할 입장이 아닙니다;) – Johnson