Проблемы с меню Java - PullRequest
       39

Проблемы с меню Java

0 голосов
/ 17 февраля 2011
statCl.addActionListener(new ActionListener(){
        public void actionPerformed (ActionEvent e) {
            try {
            ta.append("Searching...\n");
            //Do Some stuff, call some classes etc
                ta.append("Search Complete\n");
            } catch (Exception IOE) {}
        }
 });

Это может показаться странным вопросом, но у меня есть пара проблем с моим графическим интерфейсом.По сути, я хочу, чтобы вы щелкали через JMenu, переходили к нужному элементу, щелкали по нему, и запускался приведенный выше код.

Однако, когда вы нажимаете кнопку, она как бы зависает, пока запускает процессы внутри actionListener и т. Д. Затем, в конце концов, продолжается, закрывает меню и позволяет пользователю продолжить.Проблема в том, что это похоже на сбой программы.

В идеале мне бы хотелось, чтобы пользователь нажимал, появляется текст «Поиск ...», процесс запускается, а затем, как только процесс завершается.Сделав это, выдает «Search Complete»

Я пытался перемещать вещи в / из try / catch, я пытался добавить отдельный actionListener для того же предмета, и не повезло

Любые идеи будут по достоинству оценены.

Ответы [ 2 ]

3 голосов
/ 17 февраля 2011

Вам необходимо использовать SwingWorker .

Все обновления пользовательского интерфейса должны происходить в потоке диспетчеризации событий (EDT). Код в вашем слушателе действий также вызывается в EDT. Это означает, что во время работы вашего кода пользовательский интерфейс не будет обновляться.

Обычный способ справиться с этим - запустить долго выполняющийся код внутри SwingWorker. SwingUtilities.invokeLater может затем использоваться для того, чтобы позволить вашим методам долгосрочного вызова кода обновить пользовательский интерфейс, что должно происходить в EDT.

2 голосов
/ 17 февраля 2011

Попробуйте использовать SwingWorker .

...