从swingWorker处理框架

时间:2013-11-14 11:24:48

标签: java swing jframe swingworker

实际上我已经从一个框架中调用了swing工作者(假设)A ..在do-in-Background方法的swing工作者类中我有一些db查询,我也在调用框架B ..在done()中然而,我想配置框架A ..我怎么能这样做..?我不能在框架A类中编写dispose(),因为这导致在新框架(框架B)可见之前处置框架......请帮助!!

class frameA extends JFrame{
public frameA(){
//done some operations..
SwingWorker worker=new Worker();
       worker.execute();

}
public static void main(string[] args){
  new frameA();
}

}

并在工人阶级

class Worker extends SwingWorker<Void, String> {



public Worker() {
    super();


}

//Executed on the Event Dispatch Thread after the doInBackground method is finished
@Override
protected void done() {
    //want to dispose the frameA here..


}

@Override
protected Void doInBackground() throws Exception {
    // some db queries
  new frameB().setVisible(true);  
  // call to frameb
}

1 个答案:

答案 0 :(得分:3)

  1. done()的{​​{1}}方法通常会被覆盖以显示最终结果。上 完成SwingWorkerdoInBackground()自动调用 美国东部时间SwingWorker。因此,在此函数中放置框架的隐形和可见代码。

  2. done()并不意味着执行任何GUI渲染任务。您可以从doInBackground()函数调用publish(V),然后调用doInBackground()方法在EDT内运行并执行GUI渲染任务。

  3. 所以样本解决方案是:

    process(V)

    现在,通过将目标框架传递给它的构造函数来创建class Worker extends SwingWorker<Void, String> { JFrame frameA; public Worker(JFrame frameA) { this.frameA = frameA; } @Override protected void done() { frameA.dispose(); new frameB().setVisible(true); } //other code } 实例:SwingWorker;对于您的上下文,您可能可以使用new Worker(frame)

    但是,您不应该将应用程序设计为依赖于多个this。有理由不使用多个JFrame窗口。有关更多信息,请参阅The Use of Multiple JFrames, Good/Bad Practice?。关于需要多个框架的用例的一般工作是explained here.