碰到一个很妖的问题,按钮click事件调用函数可以得到正确结果,而用timer调用却不行

RechardXc 2006-12-14 05:38:07
通过jni方式调用外部dll的一个函数,通过按钮的click事件可以接收到信息,但通过timer的方式自动接收却收不到,按一下按钮收到第一条信息后,再用timer的方式调用又可以收到。在dll的函数加了printf,察看到二者传入的参数都相同,但就是用timer的方式收不到,不知道有人碰到过类似的现象没有?
...全文
327 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
RechardXc 2006-12-20
  • 打赏
  • 举报
回复
我感觉这个问题可能涉及到消息传递机制,有哪位大侠知道Java中有没有类似VC里PeekMessage、DispathMessage的方法?
RechardXc 2006-12-15
  • 打赏
  • 举报
回复
谢谢楼上的建议。我改用Thread测试了一下,还是不能接收到信息。除非先用按钮接收一下才可以。
fool_leave 2006-12-15
  • 打赏
  • 举报
回复
只能一点一点的查了,这个问题估计很难找到解释

我估计和notify有关。毕竟timer是通过notify来唤醒的

你这样,先用Thread来测试,看看能不能收到
如果不可以,则可能是线程接收的问题(估计不会)

再通过wait和notify来设置Thread的等待,看看这样可不可以收到,如果不可以,很可能是Notify的问题。那你只能用Thread来替代Timer了

如果可以,那我也不知道什么原因了,你干脆用Thread来做算了,留给sun去解决吧
RechardXc 2006-12-15
  • 打赏
  • 举报
回复
急啊,大家帮忙看看,一定给分
RechardXc 2006-12-15
  • 打赏
  • 举报
回复
对,触发了按钮的click但接收不到,所以我觉得很纳闷,难道手工点按钮和其它方式调用还有某些潜在的不同?
fool_leave 2006-12-15
  • 打赏
  • 举报
回复
BTW:我2楼的代码少写了个t.start();
就是说Timer start后直接read,结果Timer不起作用了
fool_leave 2006-12-15
  • 打赏
  • 举报
回复
你的意思是action已经触发了,但收不到信息?
RechardXc 2006-12-15
  • 打赏
  • 举报
回复
我的那个timer其实已经调用了dll的函数, debugger console里已经能定时返回函数printf出来的测试信息,但就是收不到数据。用按钮的click调用该函数就可以接收。后来把timer里改成触发按钮click来接收也不行,非要手工点一下那个按钮才能接收到信息。真奇怪啊,!·#¥%—
fool_leave 2006-12-15
  • 打赏
  • 举报
回复
我碰到过
Timer最终实际上是通过TimeQueue的单实例来判断的。我查了好久都没查到什么原因。估计和notify有关系,可能用到jni的东西,第一次会把TimeQueue锁住。只是猜想,没找到相关资料。各位可以找找。


用最简单的方法来测试
Timer t=new Timer(1000,this);
System.in.read();

这时t也不起作用了。

62,635

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧