在程序开始时在后台执行操作

时间:2010-03-02 10:24:32

标签: java swing

如何在程序启动时在后台执行操作?为此,我期待某种onLoad事件。只是要明确:加载ui。做一些事情,并根据我的事件结果加载更多的UI。

3 个答案:

答案 0 :(得分:3)

查看SwingWorker。 Swing是单线程的,因此任何后台处理都需要从单独的线程完成,以避免阻塞swing(事件调度)线程。

还没有可用的onLoad类型功能,因此您需要在初始化gui时自己启动工作程序。

EventQueue类,invokeLater()和invokeNow()中有实用程序方法,可用于从不同的线程更新gui。它们允许您指定要在事件派发线程上运行的代码。

答案 1 :(得分:2)

要在上面添加对象的答案:

如果您使用的是基于UI的应用程序,则应使用SwingWorker线程执行任何与GUI无关的工作。例如,所有Swing任务都在Event Dispatch Thread(EDT)上运行。如果要在EDT上运行代码,则应使用SwingUtilities方法。 invokeLater()将任务添加到EDT上的当前任务队列,in​​vokeAndWait()运行任务并阻塞直到完成。

如果要确保EDT上没有运行某些内容,可以使用SwingUtilities.isEventDispatchThread()调用来确定当前线程是否为EDT。

如果要从应用程序的main()方法初始化GUI,请确保任何使GUI组件可见的调用,或者通常,在EDT上运行任何GUI交互。

答案 2 :(得分:1)

我认为没有任何特定的API可用于“在开始时在后台执行操作”。但是你可以创建一个新的Thread,这是用Java做背景的标准方法。

如果您不熟悉线程和并发编程,可能需要一些时间来了解您的需求。一个好的开始是Java教程:

http://java.sun.com/docs/books/tutorial/essential/concurrency/