2013-02-12 27 views
1

只有當整個用戶界面正常運行時,我纔想運行一個thrad。所有組件的paint()已完成。 我嘗試使用SwingUtilities.invokeLater(),但仍然在整個UI啓動之前或所有組件的paint()未完成時運行該線程。只有當整個用戶界面啓動時才運行線程

是否有可能

謝謝。

+0

是的。有可能的。這取決於你何時調用invokeLater()。請分享您的代碼,以便我們看到。 – ATrubka 2013-02-12 06:17:53

回答

0

沒有辦法知道當整個UI到了,主要是因爲你寫了,可能拿自己的甜蜜時間來加載自己的許多組件。

SwingUtilities.invokeAndWait。但時機將成爲一個問題。從某種意義上說,一旦確定已經調用設置UI的初始化代碼,您就必須調用它。

一種方法可能會有一個checkflag。假設你有5個主要組件,每個組件都有自己的checkflag(或者你可以說擁有flag的commons類)。你的線程將繼續等待所有的ckeckflags,然後繼續。

你也可以使用CountdownLatch,但我不會推薦它。把事情簡單化。

0

好的。現在我明白你的問題是什麼。方法paint()不適合做invokeLater()調用。

方法paint()可能會被調用多次。實際上,只要屏幕的一部分需要重新繪製,就會調用它。

您可能需要添加你以後的調用在聽衆的代碼或在對話框關閉,但不應該從方法塗料稱爲()。

此外,方法paint()方法本身總是從事件指派線程調用​​,這樣做的invokeLater有相當多的冗餘,如果你想確保它是從EDT調用。

如果你告訴我們的方法,你寫來啓動應用程序,我們也許能夠給你指出你需要什麼地方做你的代碼調用。

相關問題