如何在程序啓動時在後臺執行動作?我希望爲此目的進行一些onLoad事件。只需要清楚:加載用戶界面。根據我的事件結果做一些事情並加載更多的用戶界面。在程序啓動時在後臺執行動作
回答
看一看的SwingWorker。 Swing是單線程的,所以任何後臺處理都需要從一個單獨的線程完成,以避免阻塞swing(事件派發)線程。
還沒有可用的onLoad類型功能,因此您需要在初始化gui時自行啓動worker。
EventQueue類中有實用方法invokeLater()和invokeNow(),它們可以用來從另一個線程更新gui。它們允許您指定要在事件分派線程上運行的代碼。
我不認爲有「開始時在背景中做東西」的任何特定的API。但是你可以創建一個新的線程,這是用Java做背景的標準方式。
如果您不熟悉線程和併發編程,您可能需要一些時間才能瞭解您的需求。良好的開端是在Java教程:
http://java.sun.com/docs/books/tutorial/essential/concurrency/
對於線程並不是什麼新東西,但在我看來,從不同的線程觸摸UI代碼是一個糟糕的主意,這使我相信會有比線程稍微更先進的構造readdy – 2010-03-02 10:40:38
實踐中的Java併發 - 由Brian Goetz是一本很好的書,可以進入更高層次的併發抽象。它也有一個特定於GUI的部分。 – Luhar 2010-03-02 13:11:47
要添加到對象的回答以上:
如果您使用的是基於UI的應用程序,你應該使用的SwingWorker線程做任何非GUI相關工作。例如,所有Swing任務都在事件調度線程(EDT)上運行。如果你想在EDT上運行代碼,你應該使用SwingUtilities方法。 invokeLater()將任務添加到EDT上當前的任務隊列中,並且invokeAndWait()將運行該任務並阻塞直到完成。
如果您想確保EDT上沒有運行的東西,可以使用SwingUtilities.isEventDispatchThread()調用來確定當前線程是否爲EDT。
如果您正在從應用程序的main()方法初始化GUI,請確保在EDT上運行GUI組件可見或通常任何GUI交互的任何調用。
- 1. iOS在啓動時啓動後臺應用程序
- 2. 如何在服務器啓動後執行後臺線程?
- 3. Android應用程序在後臺啓動
- 4. 在後臺啓動應用程序
- 5. nsis安裝程序在後臺啓動
- 6. 在後臺啓動應用程序
- 7. 在應用程序啓動時僅運行後臺服務
- 8. 在啓動過程中執行驅動程序初始化後的操作
- 9. 啓動我的android應用程序*在後臺*啓動
- 10. 設備重啓後在後臺自動運行應用程序
- 11. 殺死應用程序並啓動後,它在後臺運行
- 12. 在應用程序啓動時執行某些操作?
- 13. 在GWT啓動時啓動後臺線程
- 14. 在應用程序啓動時在後臺加載UIViews
- 15. 如何在後臺執行一些動作時,應用程序退出
- 16. 讓BroadcastReceiver作爲服務在後臺運行+啓動後自動啓動
- 17. 啓動時執行操作
- 18. 在啓動時執行Selenium
- 19. 執行PS在啓動時
- 20. 當程序啓動時執行一個動作
- 21. 如何在啓動時啓動控制檯應用程序(!)? C#
- 22. Android BroadcastReceiver啓動時 - 活動在後臺時保持運行
- 23. 在啓動時自動啓動後最小化應用程序
- 24. 啓動應用程序彈簧啓動後在類中執行某些方法
- 25. 如何在後臺啓動並運行UWP應用程序
- 26. 從正在運行的後臺服務啓動應用程序
- 27. Android應用程序在啓動和後臺運行
- 28. 如何在後臺從命令行啓動GUI應用程序?
- 29. 當應用程序在後臺時啓動AVAudioPlayer
- 30. 如何在應用程序啓動時停止後臺任務?
你是什麼意思的「背景」 - 在什麼背後?如果加載用戶界面發生在後臺,那麼它應該在前臺運行什麼?構建Swing UI必須在事件派發線程中發生。當然,你可以在其他一些線程中並行執行其他操作,例如在主線程上。 – 2010-03-02 10:44:48
你能更詳細地描述你的意思嗎,或許給出一個你的意思的通用例子?你是說你開始加載用戶界面,然後根據你在開始時沒有意識到的一些配置選項,或者在啓動過程中的一些用戶交互,你從那一點選擇加載哪個用戶界面? – glenatron 2010-03-02 10:58:46