由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Java版 - keyPressed(KeyEvent e) 需要考虑重入吗
相关主题
java 响应速度问题[转载] 如何得到machine specific的信息
getImage有个问题问个多线程的问题。
Eclipse 里如何 debug in a big while loop[合集] 请教: A question related to thread communication
如何在WINDOWS上DEBUG JAVA能否让函数返回一个用于赋值的引用
JCreator如何调试程序?JTextArea做console窗口的目前结果和问题
jvm是怎么implement monitor的?jtextpane syntax highlight问题
editor 处理tab键关于java的疑惑 (转载)
能这样编网站吗?Java程序如何优雅退出?
相关话题的讨论汇总
话题: keypressed话题: semaphore话题: 循环话题: keyevent话题: enter
进入Java版参与讨论
1 (共1页)
b***i
发帖数: 3043
1
程序生成了一个类似dos的窗口,等待用户输入。
主程序用了一个循环,里面等待semaphore,这个semaphore是窗口部分的KeyPressed里
面released
我的窗口部分keypressed, keyreleased, keytyped都重写了。在一个1.7G CPU的电脑
上,没有问题,是eclipse来编译运行。然后load到网上成为applet,在2.2G 双核的电
脑上,运行快了。但是,如果连续按下Enter, 会出现几个换行后,死机。体现在等待
semaphore,但是我看到打印的信息,最后semaphore等待的时候,keypressed根本没有
进入。为什么按下一个键却没有进入
keypressed?
public void keyPressed(KeyEvent e){
DEBUG("-->");
keypressed= e.getKeyCode();
if (keymode==3){
switch(keypressed){
case KeyEvent.VK_Enter:
h*****0
发帖数: 4889
2
主程序里在“循环”。这个是最有可能出问题的地方。贴代码啊。

【在 b***i 的大作中提到】
: 程序生成了一个类似dos的窗口,等待用户输入。
: 主程序用了一个循环,里面等待semaphore,这个semaphore是窗口部分的KeyPressed里
: 面released
: 我的窗口部分keypressed, keyreleased, keytyped都重写了。在一个1.7G CPU的电脑
: 上,没有问题,是eclipse来编译运行。然后load到网上成为applet,在2.2G 双核的电
: 脑上,运行快了。但是,如果连续按下Enter, 会出现几个换行后,死机。体现在等待
: semaphore,但是我看到打印的信息,最后semaphore等待的时候,keypressed根本没有
: 进入。为什么按下一个键却没有进入
: keypressed?
: public void keyPressed(KeyEvent e){

b***i
发帖数: 3043
3
@Override
public void keyTyped(KeyEvent e) {
keytyped=e.getKeyChar();// keynum;
switch (keymode)
{
case 0:
e.consume();
return;
case 2:
case 3:
int x=this.getCaretPosition();
if (x setCaretPosition(sD.getLength());
break;
}
}
然后,我在下面的keypressed中加入if (keymode==0){e.consume();return}就不死机
了。
我的问题,我在回车按下的时候,keypressed进入了,再没退出前,Enter一直按着,
keytype可能进入,然后consume我的回车吗?
public void keyPresse

【在 b***i 的大作中提到】
: 程序生成了一个类似dos的窗口,等待用户输入。
: 主程序用了一个循环,里面等待semaphore,这个semaphore是窗口部分的KeyPressed里
: 面released
: 我的窗口部分keypressed, keyreleased, keytyped都重写了。在一个1.7G CPU的电脑
: 上,没有问题,是eclipse来编译运行。然后load到网上成为applet,在2.2G 双核的电
: 脑上,运行快了。但是,如果连续按下Enter, 会出现几个换行后,死机。体现在等待
: semaphore,但是我看到打印的信息,最后semaphore等待的时候,keypressed根本没有
: 进入。为什么按下一个键却没有进入
: keypressed?
: public void keyPressed(KeyEvent e){

h*****0
发帖数: 4889
4
你都说了死机是死在主循环。不看主循环怎么知道为什么呢。

【在 b***i 的大作中提到】
: @Override
: public void keyTyped(KeyEvent e) {
: keytyped=e.getKeyChar();// keynum;
: switch (keymode)
: {
: case 0:
: e.consume();
: return;
: case 2:
: case 3:

b***i
发帖数: 3043
5
多谢牛人帮忙啊。
不过不是死在主循环,因为主循环在等semaphoore, 这个semaphore在GUI的keypressed
里面被release,而死机时我却看不到这个keypressed的进入,更没有release。
当时,我就一直按着enter,看到java console里面不停的显示主循环等semaphore, 进
入keypressed, 从某个if 里面release semaphore, 然后突然,停在主循环等待
semaphore那里了。我在keypressed里面入口的地方就显示进入keypressed,这个时候已
经不显示了。我怀疑keytyped把enter consumed了。
主循环在此
while (true){
kb.addPrintText("\n");
kb.prompt();
kb.EnterCommandMode(); // keymode is assigned to be 3
theGUI.waitCommand(); //等待semaphore


【在 h*****0 的大作中提到】
: 你都说了死机是死在主循环。不看主循环怎么知道为什么呢。
q*********u
发帖数: 280
6
看上去应该是dead lock吧, semaphore都出来了, 肯定要仔细检查程序里面的逻辑了,
生产者消费者的关系会不会在那些if里面乱掉了

多谢牛人帮忙啊。
不过不是死在主循环,因为主循环在等semaphoore, 这个semaphore在GUI的keypressed
里面被release,而死机时我却看不到这个keypressed的进入,更没有release。
当时,我就一直按着enter,看到java console里面不停的显示主循环等semaphore, 进
入keypressed, 从某个if 里面release semaphore, 然后突然,停在主循环等待
semaphore那里了。我在keypressed里面入口的地方就显示进入keypressed,这个时候已
经不显示了。我怀疑keytyped把enter consumed了。
主循环在此
while (true){
kb.addPrintText("\n");
kb.prompt();
kb.EnterCommandMode(); // keymode is

【在 b***i 的大作中提到】
: 多谢牛人帮忙啊。
: 不过不是死在主循环,因为主循环在等semaphoore, 这个semaphore在GUI的keypressed
: 里面被release,而死机时我却看不到这个keypressed的进入,更没有release。
: 当时,我就一直按着enter,看到java console里面不停的显示主循环等semaphore, 进
: 入keypressed, 从某个if 里面release semaphore, 然后突然,停在主循环等待
: semaphore那里了。我在keypressed里面入口的地方就显示进入keypressed,这个时候已
: 经不显示了。我怀疑keytyped把enter consumed了。
: 主循环在此
: while (true){
: kb.addPrintText("\n");

d*****d
发帖数: 180
7
main thread is also used to dispatch events. things will lock up is main
thread is waiting for lock.
h*****0
发帖数: 4889
8
是的。GUI程序主线程循环不停在java里是不太好的做法。

【在 d*****d 的大作中提到】
: main thread is also used to dispatch events. things will lock up is main
: thread is waiting for lock.

b***i
发帖数: 3043
9
真是一语道破梦中人。
我的目的,就是实现dos这样的文本窗口,同时有一些按钮等。这样,我的主程序等待
semaphore,然后按下按钮,或者回车就release semaphore。
看来,应该做一个actionprocess函数,然后根本没有主程序的等待,直接在按下回车
或者按钮的时候在keypressed或者菜单action里面call actionprocess,尽快完成任务
,比如打开文件,命令处理等,反正源头都是GUI的活动。

【在 h*****0 的大作中提到】
: 是的。GUI程序主线程循环不停在java里是不太好的做法。
1 (共1页)
进入Java版参与讨论
相关主题
Java程序如何优雅退出?JCreator如何调试程序?
问一个multiprocess的问题jvm是怎么implement monitor的?
Re: How to debug servlet?editor 处理tab键
Re: 如何Debug 在JNI 里调用的DLL? (急)能这样编网站吗?
java 响应速度问题[转载] 如何得到machine specific的信息
getImage有个问题问个多线程的问题。
Eclipse 里如何 debug in a big while loop[合集] 请教: A question related to thread communication
如何在WINDOWS上DEBUG JAVA能否让函数返回一个用于赋值的引用
相关话题的讨论汇总
话题: keypressed话题: semaphore话题: 循环话题: keyevent话题: enter