实际上我已经从一个框架中调用了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
}
答案 0 :(得分:3)
done()
的{{1}}方法通常会被覆盖以显示最终结果。上
完成SwingWorker
,doInBackground()
自动调用
美国东部时间SwingWorker
。因此,在此函数中放置框架的隐形和可见代码。
done()
并不意味着执行任何GUI渲染任务。您可以从doInBackground()
函数调用publish(V)
,然后调用doInBackground()
方法在EDT内运行并执行GUI渲染任务。
所以样本解决方案是:
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.