Java 新窗口不显示';t载荷

Java 新窗口不显示';t载荷,java,wait,Java,Wait,我需要一些帮助,我有一个方法,它是在点击按钮时执行的,这个方法会打开一个新窗口,更新另一个类中的变量,然后这个方法从类中获取这个变量,然后使用它 加载的窗口为空,似乎wait()函数正在导致线程在加载新窗口之前停止 private void autoFillUsersActionPerformed(java.awt.event.ActionEvent evt) { publicLesson pL=

我需要一些帮助,我有一个方法,它是在点击按钮时执行的,这个方法会打开一个新窗口,更新另一个类中的变量,然后这个方法从类中获取这个变量,然后使用它

加载的窗口为空,似乎wait()函数正在导致线程在加载新窗口之前停止

private void autoFillUsersActionPerformed(java.awt.event.ActionEvent evt) {                                              
    publicLesson pL= new publicLesson();
    new dateSelect().setVisible(true);
    try{
        synchronized(this){
            this.wait();
        }
    }
    catch(Exception e){

    }
  int var= pL.getAmount();
  System.out.println("var ="+var);

    DefaultTableModel defaultModel = (DefaultTableModel) pupilTable.getModel();
    for (int i = 0; i <= (userCountAmount - 1); i++) {
        defaultModel.setValueAt(var, 5, i);
        System.out.println("BeingSet");
    }

}  
private void autoFillUsersActionPerformed(java.awt.event.ActionEvent evt){
publicLesson pL=新的publicLesson();
new dateSelect().setVisible(true);
试一试{
已同步(此){
这个。等等();
}
}
捕获(例外e){
}
int var=pL.getAmount();
System.out.println(“var=”+var);
DefaultTableModel defaultModel=(DefaultTableModel)pupilTable.getModel();

对于(int i=0;i您不能这样做,因为Swing只在一个线程上运行!您需要将等待后正在执行的处理移动到您正在创建的窗口中。您不能依赖于等待

下面是一个很好的文档:


您不能这样做,因为Swing只在一个线程上运行!您需要将等待后正在执行的处理移动到您正在创建的窗口中。您不能依赖于等待

下面是一个很好的文档:


是的,确实如此。等待事件调度线程会使其完全阻塞,从而阻止任何重新绘制的发生。因此,EDT在等待时无法再绘制任何内容

长时间运行的任务,甚至更多的阻塞任务,都不应该在事件分派线程中完成。顺便说一句,现在还不清楚为什么要在这里使用
wait()


捕获异常并完全忽略它是您可以做的最糟糕的事情之一。

的确如此。等待事件调度线程会使其完全阻塞,从而防止任何重新绘制的发生。因此,EDT无法在您等待时再绘制任何内容

长时间运行的任务,甚至更多的阻塞任务,都不应该在事件分派线程中完成。顺便说一句,现在还不清楚为什么要在这里使用
wait()

捕获异常并完全忽略它是您可能做的最糟糕的事情之一。

您正在阻止异常。如果不允许EDT通过
wait
调用,则无法处理任何事件,这意味着无法绘制任何内容

不要使用新窗口,而是尝试使用。模态对话框阻止对其他顶级组件的所有访问(取决于模态类型),直到它们被正确处理。

您正在阻止。如果不允许EDT通过
wait
调用,则无法处理任何事件,这意味着无法绘制任何内容


不要使用新窗口,而是尝试使用。模态对话框阻止对其他顶级组件的所有访问(取决于模态类型),直到它们被正确处理。

等待方法继承自Object()和state

使当前线程等待,直到另一个线程调用 此对象的notify()方法或notifyAll()方法 换句话说,这个方法的行为就像它只是执行调用一样 等待(0)


因此,您必须给它一些等待的东西,但由于您正在阻塞唯一的线程,因此它无法同时绘制一些东西。

等待方法是从Object()和state继承的

使当前线程等待,直到另一个线程调用 此对象的notify()方法或notifyAll()方法 换句话说,这个方法的行为就像它只是执行调用一样 等待(0)


因此,您必须给它一些等待的东西,但是由于您正在阻塞唯一的线程,因此它不可能同时绘制一些东西。

您的目标是在主JFrame中等待,直到用户在另一个JFrame中输入您需要的数据吗? 如果这是你的目标,那就看看对话模式类型吧

构造新对话框时,只需将父对话框作为参数提供给构造函数,然后调用

super(parentDialog, Dialog.ModalityType.DOCUMENT_MODAL);
然后,主JFrame将等待新JDialog关闭,直到它运行函数的其余部分


希望有帮助。

您的目标是在主JFrame中等待用户在另一个JFrame中输入所需的数据吗? 如果这是你的目标,那就看看对话模式类型吧

构造新对话框时,只需将父对话框作为参数提供给构造函数,然后调用

super(parentDialog, Dialog.ModalityType.DOCUMENT_MODAL);
然后,主JFrame将等待新JDialog关闭,直到它运行函数的其余部分


希望能有所帮助。

我同意一些答案:删除try/catch/synchronized块,并使用javax.swing.JDialog接收用户输入。 参考Swing官方文档,它提供了足够好的示例,
i、 e.这是关于JDialog的。

我同意一些答案:删除try/catch/synchronized块并使用javax.swing.JDialog接收用户输入。 参考Swing官方文档,它提供了足够好的示例,
i、 e.关于JDialog的这一个。

是任何调用
this.wait()
的对象的
notify()
吗?Swing只有一个线程!所以wait独占了这一个线程,所以在调用
this.wait()的对象上永远不会创建任何新窗口
?Swing只有一个线程!因此wait独占了该线程,因此永远不会创建新窗口。对不起,让我澄清一下,我需要程序在从pL.getAmount()获取变量之前,等待另一个窗口中的输入这就是模态对话框所做的。使用它。或者,如果它不是一个选项,则在另一个窗口上注册一个事件侦听器,并使它在变量准备好使用后触发一个事件。对不起,让我澄清一下,我需要程序在获取变量之前等待另一个窗口中的输入