我编的多线程的程序,会翻转图片,如何能通过鼠标进入该窗口,图片会暂停,离开以后图片继续翻转! 鼠标进入窗口时响应mouseEntered事件让线程停止(暂停)鼠标离开窗口时响应mouseExited时间让线程启动 (恢复) 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 private void jbInit() throws Exception { this.setBackground(Color.white); this.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); this.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(MouseEvent e) { this_mouseClicked(e); } public void mouseEntered(MouseEvent e) { this_mouseEntered(e); } public void mouseExited(MouseEvent e) { this_mouseExited(e); } }); } void this_mouseEntered(MouseEvent e) { //imgStop=1; try { thisThread.wait(); } catch (Exception ex) { } } void this_mouseExited(MouseEvent e) { //imgStop=0; try { thisThread.start(); } catch (Exception ex) { } }不行啊 Component组件中的方法,绝大多数都是单线程的。因此,用线程来控制图片的翻转与否,是不现实的。建议你在mouse的方法中,直接对图片进行控制。 我是小应用程序,我启动了一个线程来翻转图片,我想在鼠标事件中控制线程的运作,但是好像不行。thisThread是控制图片运行的线程。在this_mouseEntered暂停线程。在this_mouseExited启动线程。但是实际效果是鼠标进入图片区域,图片仍然翻动,不会停止。我想有谁指出我的错误。还有在jb中指出线程的stop()方法已经不推荐使用了,我用过stop()代替wait(),也不行。 void this_mouseExited(MouseEvent e) { //imgStop=0; try { thisThread.start(); 改成thisThread.nodify(); this is ok. } catch (Exception ex) { } } 在线程里设置标记,通过线程方法修改此标记,发现该停止时就wait(),再在线程中增加唤醒方法来唤醒线程,如:public void go() { synchronized(this){ this.notify(); } } 你应该先去看看有关线程的概念:1、程序启动就开始你的线程。2、在线程中设置是否继续运行的标志位。3、通过你的两个事件改变标志位。4、现在每次mouseExited会启动一次thisThread.start()。5、wait()用法不是这样的。这么简单的线程根本用不到wait start()只能运行一次,应该用wait()在run()的循环内调用wait(),线程方法来notify()唤醒! 如何用SWT写个按钮,对应事件对弹出windows目录? 图形中事件处理问题 java j2ee技术群QQ:20865144 SAX2 如何解析保存为UTF-8的XML文件? 比如解析含有中文的XML 请问一个日期格式化的问题 关于注释的问题 Java -version 我的版本是1.3, 怎样安装1.5? 有下载地址吗? 关于jdkapi doc的问题(第一个回答正确的给分) 线程实现开门后三秒自动关门 在线等 大家好,那个地方有Borland AppServer下载的地方,谢谢 日期加一個月 请教进度条的设置与使用的一个简单问题??
this.setBackground(Color.white);
this.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
this.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(MouseEvent e) {
this_mouseClicked(e);
}
public void mouseEntered(MouseEvent e) {
this_mouseEntered(e);
}
public void mouseExited(MouseEvent e) {
this_mouseExited(e);
}
});
}
void this_mouseEntered(MouseEvent e) {
//imgStop=1;
try {
thisThread.wait();
}
catch (Exception ex) { }
} void this_mouseExited(MouseEvent e) {
//imgStop=0;
try {
thisThread.start();
}
catch (Exception ex) { }
}不行啊
//imgStop=0;
try {
thisThread.start(); 改成thisThread.nodify(); this is ok.
}
catch (Exception ex) { }
}
通过线程方法修改此标记,
发现该停止时就wait(),
再在线程中增加唤醒方法来唤醒线程,如:
public void go() {
synchronized(this){
this.notify();
}
}
1、程序启动就开始你的线程。
2、在线程中设置是否继续运行的标志位。
3、通过你的两个事件改变标志位。
4、现在每次mouseExited会启动一次thisThread.start()。
5、wait()用法不是这样的。这么简单的线程根本用不到wait
线程方法来notify()唤醒!