【发布时间】:2012-11-28 16:20:42
【问题描述】:
我在使用 SWING GUI 时遇到问题,或者至少我认为是 Swing gui。
这是我的主要代码文件:
/**
*
*/
package com.tda.t2.ctas.slasher;
import javax.swing.SwingUtilities;
import com.tda.t2.ctas.slasher.gui.mainFrame;
import com.tda.t2.ctas.slasher.utils.MyCloseListener;
public class SLASHer {
public SLASHer () {
}
/**
* @param args
*/
public static void main(String[] args) {
//EventQueue.invokeLater(new Runnable() {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
ConfigData myconfig = new ConfigData();
try {
//TdaUrlHelper window = new TdaUrlHelper();
//window.tdaFrame.setVisible(true);
mainFrame tdaFrame = new mainFrame();
tdaFrame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
}
创建框架并打开它的简单调用。还有其他文件我没有放在这里以获得空间。但是我遇到的问题(我已经在几台机器和操作系统上尝试过)是窗口上的按钮似乎挂起。我可以选择窗口并单击按钮,它们会像被击中一样突出显示,但没有任何反应。我有一个选项卡式平面,单击其他选项卡也无济于事。有时会持续约 15 秒,有时会持续几分钟。但它总是最终会回来并响应新的输入(即它不记得我在它回来之前所做的所有点击)。整个应用程序很简单,因为它一直等到用户执行某项操作后再执行某项操作,所以我对它为什么会挂起感到困惑。
任何帮助将不胜感激。
谢谢
【问题讨论】:
-
您的问题出在未显示的代码中。很可能您在 JButton 的 ActionListeners 中没有遵守 Swing 线程规则,但在我们看到有问题的代码之前谁知道。
-
听起来像是 GUI 线程正在打印堆栈跟踪 ( :\. ) 或者您的多线程操作不正确。
-
注意mainFrame类应该重命名为MainFrame。所有类名都应以大写字母开头。如果您希望其他人(比如我们!)能够理解您的代码并为您提供帮助,这一点很重要。
-
发布的代码与问题无关 - 您必须检查您的应用程序以找出瓶颈所在:使用调试器,或者通过尝试在每一层上打印出东西来采用肮脏的方式应用程序,每次都走得更远。
-
听起来像是一个
ActionListener附加到按钮上,该按钮使用工作线程在 EDT iso 上启动繁重的任务。查看concurrency in swing 教程
标签: java swing user-interface swingutilities