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

RechardXc 2006-12-14 05:38:07
通过jni方式调用外部dll的一个函数,通过按钮的click事件可以接收到信息,但通过timer的方式自动接收却收不到,按一下按钮收到第一条信息后,再用timer的方式调用又可以收到。在dll的函数加了printf,察看到二者传入的参数都相同,但就是用timer的方式收不到,不知道有人碰到过类似的现象没有?
...全文
270 点赞 收藏 9
写回复
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也不起作用了。
回复 点赞
发动态
发帖子
Java SE
创建于2007-09-28

3.4w+

社区成员

30.7w+

社区内容

Java 2 Standard Edition
社区公告
暂无公告