JDialog в новой теме не отвечает - PullRequest
1 голос
/ 07 декабря 2011

Я хочу создать JDialog в другом потоке (покажет время), в то время как в основном потоке будет работать функция.

, когда я создаю диалоговое окно, оно отображается, но оно есть "застрял "... и я не вижу его компонентов ...

Только после завершения функции в главном потоке - Диалог отображается правильно ..

Как я могу это исправить

Ответы [ 3 ]

1 голос
/ 07 декабря 2011

Вызовите создание JDialog внутри SwingUtilities.invokeLater или invokeAndWait

1 голос
/ 07 декабря 2011

Вам нужно использовать очередь событий awt, чтобы открыть ее. Насколько я знаю, просто поместить его в отдельную ветку

должен запустить редактор Face в другом потоке, чтобы меню JFrame и ускорители работали,

    java.awt.EventQueue.invokeLater(new Runnable() {

        @Override
        public void run() {
            editFace();
        }
    });

где editFace () содержит код для запуска и отображения нового кадра

            Viewer2D v = new Viewer2D(this);
            this.addFaceEditor(FaceToEdit, v);
            v.DrawFace(FaceToEdit);
            v.showAndRaise();
1 голос
/ 07 декабря 2011

Если вы выполняете большое задание в Swing EDT, оно блокирует перерисовывание элементов пользовательского интерфейса, поскольку это поток, в котором происходит вся рисование Swing.

Единственный разумный способ обойти это - запустить большую задачу в отдельном потоке. Посмотрите на SwingWorker класс: http://docs.oracle.com/javase/6/docs/api/javax/swing/SwingWorker.html

...