Java GUI菜单问题

时间:2011-02-17 10:24:23

标签: java swing user-interface actionlistener jmenu

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) {}
        }
 });

这可能看起来像一个奇怪的问题,但我的GUI存在一些问题。基本上,我想要它,所以你点击JMenu,找到你想要的项目,点击它,它运行上面的代码。

然而,当你点击按钮时,它会在运行actionListener等内部的进程时冻结。然后最终继续,关闭菜单并让用户继续。问题是,它有点像程序崩溃了。

理想情况下,我喜欢它,以便用户点击,出现“搜索...”文本,流程运行,然后一旦完成流程,就打印出“搜索完成”

我已尝试将内容移入和移出try / catch,我尝试为同一项添加单独的actionListener但没有运气

任何想法都会非常感激。

2 个答案:

答案 0 :(得分:3)

您需要使用SwingWorker

用户界面的所有更新必须在事件调度线程(EDT)上进行。动作监听器中的代码也会在EDT上调用。这意味着在您的代码运行时,UI将不会更新。

处理此问题的常用方法是让长时间运行的代码在SwingWorker中运行。然后可以使用SwingUtilities.invokeLater让您的长时间运行的代码调用方法来更新UI,这必须在EDT上进行。

答案 1 :(得分:2)

尝试使用SwingWorker