Java JFrame等待另一个JFrame
我有以下情况。有一个类JFrame1,它执行一系列指令,将焦点交给另一个JFrame2,然后继续。当JFrame2获得焦点时,JFrame1应该期望JFrame2处理而不是执行以下指令。怎么办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{
//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组件之间进行通信。您反复询问。请别再说了。要求澄清一个问题,且仅要求澄清一个问题。这对支持此网站的志愿者不公平。请参阅