如何在程序启动时在后台执行动作?我希望为此目的进行一些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