Java 新窗口不显示';t载荷
我需要一些帮助,我有一个方法,它是在点击按钮时执行的,这个方法会打开一个新窗口,更新另一个类中的变量,然后这个方法从类中获取这个变量,然后使用它 加载的窗口为空,似乎wait()函数正在导致线程在加载新窗口之前停止Java 新窗口不显示';t载荷,java,wait,Java,Wait,我需要一些帮助,我有一个方法,它是在点击按钮时执行的,这个方法会打开一个新窗口,更新另一个类中的变量,然后这个方法从类中获取这个变量,然后使用它 加载的窗口为空,似乎wait()函数正在导致线程在加载新窗口之前停止 private void autoFillUsersActionPerformed(java.awt.event.ActionEvent evt) { publicLesson pL=
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()获取变量之前,等待另一个窗口中的输入这就是模态对话框所做的。使用它。或者,如果它不是一个选项,则在另一个窗口上注册一个事件侦听器,并使它在变量准备好使用后触发一个事件。对不起,让我澄清一下,我需要程序在获取变量之前等待另一个窗口中的输入