我正在開發一個簡單的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?不過我敢肯定的是你所提到的重比事件循環的線程上,就是這個問題。你能詳細說明一下嗎? –