自定义了一个StartDialog的类,是继承自JDialog的,这个类主要是实现一个启动界面,我在程序里实例的时候是放在EDT线程里的,想要在这个类显示后再让主线程运行该怎么做?我目前是这样写的
public ManagerCenter()
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
dlgStart = new StartDialog(ManagerCenter.this);
}
});
synchronized (this)
{
while (dlgStart == null || dlgStart.isVisible() == false)
try
{
this.wait();
}
catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
可一运行就会进入DEBUG界面,但并不指出是哪里出错,然后就死机了,这是什么原因啊
public ManagerCenter()
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
dlgStart = new StartDialog(ManagerCenter.this);
}
});
synchronized (this)
{
while (dlgStart == null || dlgStart.isVisible() == false)
try
{
this.wait();
}
catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
可一运行就会进入DEBUG界面,但并不指出是哪里出错,然后就死机了,这是什么原因啊
解决方案 »
- jdk6update4中的lib里怎么没有dt.jar和tools.jar文件
- 谁能给我讲讲啊,我要疯了,关于applet?快一个星期了,解决不了啊!!
- JAVA中有没有内存泄漏?????
- 遇到一个误差积累的问题!有没好的解决方法?
- applet与servlet采用html通信,如何传递对象,如List?
- 请到此领分!
- 提示 '.'expected
- 强烈建议分类JAVA论坛,我的想法如下....
- jdbc访问大型数据库的速度问题?!
- 刚学习java 请教一个repaint()调用问题 感谢回答
- null和""这两个有什么区别啊?
- 自己整的一道题,感觉简单却不会做了,求教,关于输入流和循环输出的问题
不用合并线程也可以。在主线程里声明,他会阻塞在await方法处,等待所有的子线程运行完毕,再执行下面的代码。
具体用法,可以查帮助
synchronized(主线程)
{
Swing组件运行完毕后
主线程.notify()
}
synchronized(主线程)
{
while(Swing线程中相应的代码尚未执行完毕)
wait();
}
示例用法: 下面给出了两个类,其中一组 worker 线程使用了两个倒计数锁存器: 第一个类是一个启动信号,在 driver 为继续执行 worker 做好准备之前,它会阻止所有的 worker 继续执行。
第二个类是一个完成信号,它允许 driver 在完成所有 worker 之前一直等待。 class Driver { // ...
void main() throws InterruptedException {
CountDownLatch startSignal = new CountDownLatch(1);
CountDownLatch doneSignal = new CountDownLatch(N); for (int i = 0; i < N; ++i) // create and start threads
new Thread(new Worker(startSignal, doneSignal)).start(); doSomethingElse(); // don't let run yet
startSignal.countDown(); // let all threads proceed
doSomethingElse();
doneSignal.await(); // wait for all to finish
}
} class Worker implements Runnable {
private final CountDownLatch startSignal;
private final CountDownLatch doneSignal;
Worker(CountDownLatch startSignal, CountDownLatch doneSignal) {
this.startSignal = startSignal;
this.doneSignal = doneSignal;
}
public void run() {
try {
startSignal.await();
doWork();
doneSignal.countDown();
} catch (InterruptedException ex) {} // return;
} void doWork() { ... }
} 以上代码来自java帮助文档的java.util.concurrent.CountDownLatch类