Java JFrame等待另一个JFrame

Java JFrame等待另一个JFrame,java,multithreading,swing,jframe,task,Java,Multithreading,Swing,Jframe,Task,我有以下情况。有一个类JFrame1,它执行一系列指令,将焦点交给另一个JFrame2,然后继续。当JFrame2获得焦点时,JFrame1应该期望JFrame2处理而不是执行以下指令。怎么办 JFrame1{ //instruction 1 //instruction 2 // .... //instruction 6 JFrame2 starts [waiting for results of JFrame2] //instruction 7

我有以下情况。有一个类JFrame1,它执行一系列指令,将焦点交给另一个JFrame2,然后继续。当JFrame2获得焦点时,JFrame1应该期望JFrame2处理而不是执行以下指令。怎么办

JFrame1{
   //instruction 1
   //instruction 2
   // ....
   //instruction 6
   JFrame2 starts
   [waiting for results of JFrame2]
   //instruction 7
   //instruction 8}

JFrame1在恢复焦点时应执行指令7和指令8

通常,让一个JFrame启动另一个JFrame并不好,除非它们完全独立。我建议您启动JDialog而不是JFrame2。JDialog的使用方式与JFrame相同,所有命令都相同。启动JDialog的JFrame将暂停,直到JDialog被释放,并从JDialog类中调用this.dispose()。那么它看起来是这样的:

JFrame1 starts
instruction 1
instruction 2
...
instruction 6
JDialog (like JFrame2) starts
(JFrame1 waiting for JDialog to be disposed with this.dispose())
instruction 7
...
你可以看看


HTH

我假定您的意思是,当前,指令7和8在第2帧打开后立即发生。要在JFrame2关闭后执行指令7和8,可以使用JDialog或JOptionPane将JFrame2设置为模态对话框,也可以将侦听器附加到JFrame2,如下所示:

frame2.addWindowListener(new WindowAdapter() {
    @Override
    public void windowClosing(WindowEvent e) {
        // instruction 7
        // instruction 8
    }
});

您应该尝试将正在执行的操作组织到一个类中并创建对象。显然,这是一个极其简化的示例:

public class Frames extends JFrame{
  public Frames(){
   super("Frame 1");
   setSize(500,500);
   //setup frame 1 look
   doWorkMethodForFrame1();
  }
  public Frames(int arg){
   super("Frame 2");
   setSize(500,500);
   //setup frame 2 look
    doWorkMethodForFrame2(data);
  }


   public void doWorkMethodForFrame1(){
   //do work
   setVisible(false);
   }  
   public void doWorkMethodForFrame2(int data){
   //do work
   setVisible(false);
   }




}

//call your frames
new Frames();
new Frames(dataSend);

Swing是单线程的,不能为此使用线程。你的思考模式是错误的,不同的窗口并没有真正并行地执行操作,它们发送事件,这些事件是串行处理的。使用事件在GUI组件之间进行通信。您反复询问。请别再说了。要求澄清一个问题,且仅要求澄清一个问题。这对支持此网站的志愿者不公平。请参阅