Java 处理来自swingWorker的框架
实际上,我已经从一个框架(假设)a.中调用了swing worker。。在后台方法do中的swing worker类中,我有一些db查询,我也在调用frame B。。但是,在done()方法中,我要处理帧A。。我该怎么做。。?我无法在frame A类中编写dispose(),因为这会导致在新帧(frame B)可见之前处理frame。。。请帮忙Java 处理来自swingWorker的框架,java,swing,jframe,swingworker,Java,Swing,Jframe,Swingworker,实际上,我已经从一个框架(假设)a.中调用了swing worker。。在后台方法do中的swing worker类中,我有一些db查询,我也在调用frame B。。但是,在done()方法中,我要处理帧A。。我该怎么做。。?我无法在frame A类中编写dispose(),因为这会导致在新帧(frame B)可见之前处理frame。。。请帮忙 class frameA extends JFrame{ public frameA(){ //done some operations.. Swing
class frameA extends JFrame{
public frameA(){
//done some operations..
SwingWorker worker=new Worker();
worker.execute();
}
public static void main(string[] args){
new frameA();
}
}
工人阶级
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
}
类工作者扩展SwingWorker{
公职人员(){
超级();
}
//在doInBackground方法完成后在事件分派线程上执行
@凌驾
受保护的void done(){
//要在此处处置框架A。。
}
@凌驾
受保护的Void doInBackground()引发异常{
//一些数据库查询
新frameB().setVisible(true);
//调用frameb
}
SwingWorker
的done()
方法通常会被覆盖以显示最终结果
完成doInBackground()
,SwingWorker将自动调用
done()
在EDT中。因此,将帧的不可见和可见代码放入此函数中class frameA extends JFrame{
public frameA(){
//done some operations..
SwingWorker worker=new Worker();
worker.execute();
}
public static void main(string[] args){
new frameA();
}
}
doInBackground()
不用于执行任何GUI渲染任务。您可以从doInBackground()
函数调用publish(V)
,该函数反过来调用process(V)
方法在EDT内运行并执行GUI渲染任务class frameA extends JFrame{
public frameA(){
//done some operations..
SwingWorker worker=new Worker();
worker.execute();
}
public static void main(string[] args){
new frameA();
}
}
因此,样本溶液应为:
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> {
JFrame frameA;
public Worker(JFrame frameA) {
this.frameA = frameA;
}
@Override
protected void done() {
frameA.dispose();
new frameB().setVisible(true);
}
//other code
}
类工作者扩展SwingWorker{
jframea;
公共工作者(JA){
this.frameA=frameA;
}
@凌驾
受保护的void done(){
frameA.dispose();
新frameB().setVisible(true);
}
//其他代码
}
现在,通过将目标帧传递给其构造函数来创建SwingWorker
实例:newworker(frame)
;对于您的上下文,您可能可以使用此
class frameA extends JFrame{
public frameA(){
//done some operations..
SwingWorker worker=new Worker();
worker.execute();
}
public static void main(string[] args){
new frameA();
}
}
但是,您不应该将应用程序设计为依赖于多个
JFrame
。不使用多个JFrame
窗口是有原因的。有关更多信息,请参阅。在需要多个框架的用例中,一个通用的解决方法是这种情况看起来很可疑,就像使用单个框架和would更合适。还请注意,您通过在main()
和doInBackground()
中修改EDT之外的swing组件,违反了swing线程规则。是否无法处理框架a..z因为我的应用程序中需要它..我无法使用选项卡式窗口
class frameA extends JFrame{
public frameA(){
//done some operations..
SwingWorker worker=new Worker();
worker.execute();
}
public static void main(string[] args){
new frameA();
}
}