0
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,但没有运气

任何想法都会非常感激。

4

2 回答 2

3

您需要使用SwingWorker

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

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

于 2011-02-17T10:26:37.433 回答
2

尝试使用SwingWorker

于 2011-02-17T10:26:40.380 回答