2012-04-03 70 views
1

我正在写一个button.In事件,在我使用的方式,我在这个按钮代码中使用execute方法swingworker。一切工作正常,但问题是,我想在execute方法结束后显示一个面板。发生什么事是面板出现在执行方法完成其任务之前。这里是我的代码。一旦执行方法完成其任务面板出现在SwingWorker执行方法之前完成其任务

   Main f2=new Main(); 
       f2.getfile(FileName,0); 
       f2.execute(); 
       Panel.setVisible(true); 
       Panel.setSize(815, 587); 

编辑: 那么我已经找到了解决,对于此,如果任何人面临着同样的疑难问题已经创建了一个方法(称之为showPanel)在GUI类,并且当完成的SwingWorker方法具d被调用,然后在那个完成的方法中,我调用showPanel方法来显示面板。

+0

不会在execute()方法工作结束时添加面板创建? – 2012-04-03 08:54:41

+0

@JimmyGustafsson面板出现在执行方法完成之前的任务 – Xara 2012-04-03 09:00:44

+0

请学习java命名约定并坚持使用 – kleopatra 2012-04-03 09:55:47

回答

2

SwingWorker在另一个Thread(称为类javadoc中的工作线程),然后是EDT中执行其工作,并允许在其执行期间/之后更新事件调度线程。

为什么之前execute方法完成在class Javadoc of the SwingWorker类,这显然是提到了你的面板变得可见的原因必读:

的execute()方法被调用这个线程。它调度SwingWorker在一个工作者线程的执行,并立即返回

SwingWorker的用法示例见this answer,或咨询Swing concurrency tutorial以获取更多信息。

+0

_SwingWorker将在EDT上执行其后台任务,并阻止您的UI_ehhh ...不。执行可以从_any_线程调用(只需读取引用,重点在_schedules_和_worker thread_ :)它不会阻塞调用线程,这是@Zara正在观察的:execute()下面的代码行是立即执行 – kleopatra 2012-04-03 10:05:05

+0

@kleopatra你是完全正确的。在发布之前,我有另一个(不正确)的答案版本,并且认为我在阅读SwingWorker javadoc后纠正了所有问题。我描述的行为可能发生在您将run方法调用为execute方法时。我从我的答案中删除了不正确的部分 – Robin 2012-04-03 10:10:00

相关问题