小弟现碰到一问题,感觉不知道怎么搞,请教各位。
    我的程序是Swing的gui,界面上只有两个控件:JTextField和JButton,当程序一启动时,就另起一个线程在每隔50ms加1,把数值写到JTextField里,每当我点击JButton时,就又另起一个线程,这个线程的任务是用jni调用一个dll中的 jni_fun(),jni_fun()的内容是用SendMessage向一个CDialog发送一个消息,该消息处理函数是弹出一个 AfxMessageBox。
    问题来了,每当AfxMessageBox弹出后,我的Swing 界面停止了刷新,就是那个JTextField里的数值不再增加了,可是后台的那个每隔50ms加1的线程应该还在运行,原因是当我把 AfxMessageBox关闭后,那个JTextField又开始刷新了,从值的变化上看在没有刷新的那段时间内其值还是继续在增加着。
    我的疑惑是我在调用jni_fun()时是另起一个线程啊,为什么还会影响到我的界面刷新呢? 

解决方案 »

  1.   

    弹出的AftMessageBox与界面刷新(就是拥有textfield的那个界面)在同一个线程下,而你那个消息框是线程阻塞的(就是必须点一下才能干别的)
    所以它阻塞了你的界面刷新,实际上你后台还在处理,只是界面不处理了!你可以尝试用其它方式显示消息,别用弹出框
      

  2.   

    呵呵,可以试下在后台50ms加一次的线程里另起一个线程调用jni看看是否连这个线程也被阻塞了。如果是这样的话,就说明调用c++的方法弹出窗口会直接影响到java中的线程的父线程。
      

  3.   


    这个和messagebox的模态对话框无关,因为如果我不用SendMessage向一个CDialog个消息而弹出一个 AfxMessageBox这种方式,直接在jni_fun()里面AfxMessageBox,Swing里面的jtextfield可以正常刷新的
      

  4.   

    楼主,我理解是这样的,你的jni_fun的函数是在另外的一个线程中(与界面不在同一个线程中),所以直接调用不会有问题!
    而你通过“SendMessage向一个CDialog”,这个弹出AfxMessageBox的线程却是同界面一个线程的!