我遇到了SWING GUI的问题,或者至少我认为它是摇摆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秒,有时则持续几分钟。但它总是最终回来并且会响应新的输入(即它不记得我在回来之前所做的所有点击)。整个应用程序很简单,因为它等待用户在做某事之前做某事所以我很困惑为什么它似乎挂起。
任何帮助都将不胜感激。
由于
答案 0 :(得分:1)
挂起的按钮附加了什么违规代码?检查控制台是否有异常,并在该代码的顶部和底部放置一些System.out.println()语句。看看你是否看到这些打印报表打印出来。观看顶部打印和打印底部打印所需的时间。如果您看到两个语句,那么您就知道整个块正在执行,但如果显示最后一个语句需要一段时间,您知道您正在挂起Swing线程(也称为EDT - 事件分派线程)。 Swing UI中的规则第一个在执行ActionListener时无法重绘。
为了制作响应式用户界面,你必须看到控制台上的第一个和最后一个语句出现在10-100ms之内(视觉上几乎是瞬间的)。如果你真的想要得到想象,你可以在stop和bottom使用System.currentTimeMillis()。减去这两个值并println()它。那将会告诉你听众的确切时间。如果它大于100毫秒,则需要通过改进算法或在线程上加载长计算来重构代码(请参阅此SwingWorker tutorial)。
public void actionPerformed(ActionEvent event) {
System.out.println("Starting SomeProcess");
long start = System.currentTimeMillis();
// all your code belongs here
long duration = System.currentTimeMillis() - start;
System.out.printf("SomeProcess took %,d ms%n", duration );
}