只有當整個用戶界面正常運行時,我纔想運行一個thrad。所有組件的paint()
已完成。 我嘗試使用SwingUtilities.invokeLater()
,但仍然在整個UI啓動之前或所有組件的paint()
未完成時運行該線程。只有當整個用戶界面啓動時才運行線程
是否有可能?
謝謝。
只有當整個用戶界面正常運行時,我纔想運行一個thrad。所有組件的paint()
已完成。 我嘗試使用SwingUtilities.invokeLater()
,但仍然在整個UI啓動之前或所有組件的paint()
未完成時運行該線程。只有當整個用戶界面啓動時才運行線程
是否有可能?
謝謝。
沒有辦法知道當整個UI到了,主要是因爲你寫了,可能拿自己的甜蜜時間來加載自己的許多組件。
有SwingUtilities.invokeAndWait。但時機將成爲一個問題。從某種意義上說,一旦確定已經調用設置UI的初始化代碼,您就必須調用它。
一種方法可能會有一個checkflag。假設你有5個主要組件,每個組件都有自己的checkflag(或者你可以說擁有flag的commons類)。你的線程將繼續等待所有的ckeckflags,然後繼續。
你也可以使用CountdownLatch,但我不會推薦它。把事情簡單化。
好的。現在我明白你的問題是什麼。方法paint()不適合做invokeLater()調用。
方法paint()可能會被調用多次。實際上,只要屏幕的一部分需要重新繪製,就會調用它。
您可能需要添加你以後的調用在聽衆的代碼或在對話框關閉,但不應該從方法塗料稱爲()。
此外,方法paint()方法本身總是從事件指派線程調用,這樣做的invokeLater有相當多的冗餘,如果你想確保它是從EDT調用。
如果你告訴我們的方法,你寫來啓動應用程序,我們也許能夠給你指出你需要什麼地方做你的代碼調用。
是的。有可能的。這取決於你何時調用invokeLater()。請分享您的代碼,以便我們看到。 – ATrubka 2013-02-12 06:17:53