实际上我已经从框架(假设)A 中调用了 Swing Worker ..在 do-in-Background 方法中的 Swing Worker 类中我有某些数据库查询,并且我也调用了 Frame B ..在 did() 方法中但是我想要处置框架 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
}
The done()
的方法SwingWorker
通常会被覆盖以显示最终结果。之上
的完成doInBackground()
, 这SwingWorker
自动调用done()
在东部夏令时间。因此,将框架的不可见和可见代码放入此函数中。
The doInBackground()
并不意味着执行任何 GUI 渲染任务。您可以调用publish(V)
from doInBackground()
函数依次调用process(V)
方法在 EDT 内运行并执行 GUI 渲染任务。
所以示例解决方案是:
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
。不使用多个是有原因的JFrame
窗户。有关更多信息,请参阅多个 JFrame 的使用,好/坏实践?。需要多个框架的用例的一般解决方法是在这里解释。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)