注意:我工作了很多时间并研究了google和stackoverflow,但我找不到答案。
我用线。sleep(),它冻结了所有其他JDialog、JFrame和线程。
我的示例代码:
public Guitest()
{
setSize(300,300);
// create a JDialog that make guitest wait
MyDialog dlg = new MyDialog();
dlg.setSize(100,100);
dlg.setVisible(true);
while(dlg.isWait())
{
try
{
Thread.sleep(1000);
} catch (InterruptedException ex)
{
Logger.getLogger(Guitest.class.getName()).log(Level.SEVERE, null, ex);
}
System.out.println("waiting mydialog");
}
}
class MyDialog extends JDialog
{
boolean wait = true;
JButton btn = new JButton("OK");
public MyDialog()
{
setSize(50,50);
btn.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
wait=false;
}
});
add(btn);
}
public boolean isWait()
{
return wait;
}
}
在这种情况下,JDialog无法正确显示:
inccorect出现jdialog
但它必须符合这一点:
true出现jdialog
我怎样才能解决这个问题。我想让主线程等待另一个线程。有人可以纠正我的示例代码,或者在这种情况下共享示例代码。
线程。睡眠()
只是让当前线程Hibernate(即停止它做任何事情,例如重绘、处理点击等),在您的例子中是UI线程
。
您需要使用辅助线程。任何需要完成的主要工作都需要在它自己的线程中完成,这就是你想要睡眠的线程。它目前与UI组件一起运行,这就是为什么你会看到它们冻结的原因。
一个很好的参考是摆动
并发的留档http://docs.oracle.com/javase/tutorial/uiswing/concurrency/
以下内容也可能有用:
http://java.sun.com/developer/technicalArticles/Threads/swing/http://java.sun.com/products/jfc/tsc/articles/threads/threads1.html
嗯,看起来你只有一个线程在运行。首先,我们绘制JDialog,然后,由于wait标志,您将Hibernate主线程。例如,你不能执行你的按钮动作监听器,因此你不能唤醒你的线程。
希望有助于理解。
下面是代码,我面临的问题是recordRead变量告诉线程应该从哪里开始读取记录的起点。但是我如何为每个线程设置不同的值?例如,对于thread1,它应该是0,recordsToRead应该是300,对于thread2,recordsToRead应该是300+300=600,对于最后一个线程,它应该是600以及更高的结束。pagesize=50pagesize、recordRead和recordT
你好,我是多线程编程的新手。我正在尝试创建一个代码来创建一个线程THREAD1,在它完成某些事情后,它会触发另外两个线程,例如THREAD2和THREAD3,然后退出。 我写了两个可能的解决方案。 1) 使用条件变量(不起作用:在某些情况下会出现死锁): 2) THREAD1直接创建另外两个线程。 我想知道你的意见。非常感谢你
来自文档:http://docs.python.org/2/library/thread 让我们在这里只讨论非守护进程线程。因为第一个引号没有特别提到非守护进程线程,所以我假设,如果主线程退出,即使是非守护进程线程也应该被杀死。然而,第二句引文却表明了另一种情况。事实上,当主线程退出时,非守护进程线程确实不会被杀死。那么,这里的第一个引用有什么意义呢?
多线程其他模式 Promise Pipeline Master-Slave Serial Thread Confinement Promise 所谓Promise, 就是一个对象, 用来传递异步操作的消息. 它代表了某个未来才会知道结果的事件(通常是一个异步操作), 并且这个事件提供统一的API, 可供进一步处理. 对象的状态不受外界影响. Promise对象代表一个异步操作, 有三种状态: Pe
我正在编写一个Android应用程序,它连接到蓝牙设备,读取设备发送的数据,将其添加到AChartEngine图形中,并在文本视图中显示数据。 我的Bluetooth代码与BluetoothChat示例代码中的线程实现非常相似(它与SDK一起提供)。我可以在LogCat中看到< code>ConnectedThread循环正在执行并因此获得新数据,但我的TextView在7行之后停止更新,图形间歇
我打算在主线程中启动2个线程,主线程应该等到所有2个子线程完成,我就是这样做的。 在上面的代码中,确实让主线程等待子线程,但问题是,在第一个线程完成之前不会创建第二个线程。这不是我想要的。 我想要的是,这两个线程立即在主线程中创建,然后主线程等待它们完成。似乎做不到,是吗? 我想,也许我可以通过一个信号灯来完成这项工作,但还有别的方法吗?