展开全部
你说的异常是指这个吗:Exception in thread "Thread-0" java.lang.IllegalMonitorStateException
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Object.java:503)
at ShowPictureFrame$6.run(ShowPictureFrame.java:143)
另外,似乎32313133353236313431303231363533e4b893e5b19e31333332643339 lz 想要实现的功能是每隔 1 秒换图片,推荐 lz 使用 java.util.concurrent.ScheduledExecutorService
如果你要用 wait 的话,obj.wait() 是一定要包在 synchronized(obj) 里的,详见:
而且 obj.notify() 是必须从另一个线程调用的,因为这个线程一遇到 wait() 就会一直停在那里。
==========
JDK 1.5 的 ScheduledExecutorService 是用来在指定的时间执行一个 Runnable 的,跟 JDK 1.4 的 TimerTask 比起来,优点是可以处理异常。
大致框架(伪码)如下:ScheduledExecutorService executor;
start/continue {
executor = Executors.newScheduledThreadPool(1);
// 每1秒执行 cardlayout.next()
executor.scheduleAtFixedRate({cardlayout.next()}, 1s);
}
stop {
// 关闭 executor
executor.shutdown();
executor.awaitTermination(10s);
executor = null;
}
again {
cardlayout.first(); // 让 cardlayout 到第一个
start();
}
这样写还不需要 flag