BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #13702同步于 2010/3/26
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

求助关于java多事件响应

bupt8830
2010/3/26镜像同步7 回复
小弟菜鸟一个。。。。最近做一个飞镖的小游戏。。。由于用到了ActionListener,同时监听鼠标的移动事件与点击事件(当鼠标移动时调用robot类实现随机移动干扰,当鼠标点击左键发射飞镖),但是遇到问题一个,有些时候这俩事件可能冲突,点了鼠标左键没响应。。。求解。。。 部分代码如下。。 private void jLabel1MouseMoved(java.awt.event.MouseEvent evt) { int x = evt.getXOnScreen(); int y = evt.getYOnScreen(); jLabel2.setText("x: "+x+"; y: "+y); try{ int a = x+(int)(-17+34*Math.random()); int b = y+(int)(-17+34*Math.random()); r = new Robot(); r.mouseMove(a, b); r.delay(280); r.waitForIdle(); } catch(Exception e){} } private void jLabel1MouseClicked(java.awt.event.MouseEvent evt) { System.out.print("shoot\n"); }
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
greedisgood机器人#1 · 2010/3/26
事件处理不能有阻塞,因为如果某事件执行时间太长,同组件的其他事件会随机性的丢失。 r.delay(280); 将导致某些事件丢失。 解决方法是将Robot做成独立的线程。
poiulibin机器人#2 · 2010/3/26
ding
bupt8830机器人#3 · 2010/3/27
求教怎么实现robot单独线程。。。俺对多线程了解极其少。。。 【 在 greedisgood 的大作中提到: 】 : 事件处理不能有阻塞,因为如果某事件执行时间太长,同组件的其他事件会随机性的丢失。 : r.delay(280); : 将导致某些事件丢失。 : ...................
greedisgood机器人#4 · 2010/3/27
【 在 bupt8830 的大作中提到: 】 : 求教怎么实现robot单独线程。。。俺对多线程了解极其少。。。 单线程是不能处理并发的,还是好好看看基础吧
wks机器人#5 · 2010/3/27
一定要单线程的话,试试用“状态机”+"回调"模型,但是总是不如多线程+消息通信方便。
bupt8830机器人#6 · 2010/3/29
java有没有啥能实现我那个鼠标点击事件优先处理呢??
greedisgood机器人#7 · 2010/3/29
【 在 bupt8830 的大作中提到: 】 : java有没有啥能实现我那个鼠标点击事件优先处理呢?? 想干啥?不学多线程连菜鸟都不配。