小弟现碰到一问题,感觉不知道怎么搞,请教各位。
我的程序是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()时是另起一个线程啊,为什么还会影响到我的界面刷新呢?
我的程序是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()时是另起一个线程啊,为什么还会影响到我的界面刷新呢?
所以它阻塞了你的界面刷新,实际上你后台还在处理,只是界面不处理了!你可以尝试用其它方式显示消息,别用弹出框
这个和messagebox的模态对话框无关,因为如果我不用SendMessage向一个CDialog个消息而弹出一个 AfxMessageBox这种方式,直接在jni_fun()里面AfxMessageBox,Swing里面的jtextfield可以正常刷新的
而你通过“SendMessage向一个CDialog”,这个弹出AfxMessageBox的线程却是同界面一个线程的!