我正在开发一个简单的Java swing项目。这是主类的代码(名称变更):添加JFrame事件处理程序之前的延迟?
public class MainProg
{
private static MainProg program;
//mainWin is a JFrame
private MainWindow mainWin;
//Event handler class which extends MouseAdapter
private TrayManager trayMgr;
public static void main(String[] args)
{
program = new MainProg();
}
public MainProg()
{
mainWin = new MainWindow();
trayMgr = new TrayManager();
mainWin.startBtn.addMouseListener(trayMgr);
mainWin.setVisible(true);
}
}
清楚地看出,在程序启动时,在main()
它创建MainProg
类,然后调用构造函数的新实例。在构造函数中,它创建了一个JFrame的新实例mainWin
。然后它将一个事件处理程序附加到mainWin
上的按钮上。
在事件处理程序类trayMgr
,唯一的方法是mouseClicked()
它什么也不做 除外System.out.println('Clicked');
是,当我运行这个程序在NetBeans中,JFrame中被立即显示的问题,但我似乎在控制台中打印消息之前,必须点击按钮2-3次。
这只是特定于Netbeans的东西,还是我必须更改某些内容才能使窗口变得可见之前设置事件处理程序?
任何你可以包括[SSCCE](http://sscce.org/)的机会来证明这个问题? – tenorsax
Netbeans不会更改程序的运行方式。你的代码也是不正确的,因为它从EDT以外的线程调用Swing。这可能是造成这个问题的原因。如果您向我们展示SSCCE为@Max表示我们可能会提供帮助。 – Gene
@Gene我如何创建一个SSCCE?不过我敢肯定的是你所提到的重比事件循环的线程上,就是这个问题。你能详细说明一下吗? –