java中怎样让主线程暂时停止运行,直到鼠标点击按钮以后再继续运行 100
设置死循环当点按钮时使循环条件为假的方式试过,程序会卡死。使用wait()则会抛出异常。voidrunevent1(){System.out.println("run1"...
设置死循环当点按钮时使循环条件为假的方式试过,程序会卡死。使用wait()则会抛出异常。
void runevent1() {System.out.println("run1");
ArrayList<String> words=new ArrayList<String>();
words=reader.readEvent("event.txt", event1);
for(String line:words){
System.out.println(line);
/*while(event1stop){
try {
Thread.sleep(50);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
event1stop=true;*/
try {
wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} 展开
void runevent1() {System.out.println("run1");
ArrayList<String> words=new ArrayList<String>();
words=reader.readEvent("event.txt", event1);
for(String line:words){
System.out.println(line);
/*while(event1stop){
try {
Thread.sleep(50);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
event1stop=true;*/
try {
wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} 展开
5个回答
展开全部
请你说明一下这个runevent1过程是哪个线程上运行的。如果这个线程是Swing GUI线程则无法实现(因为按钮运行在Swing GUI线程)。如果是其他线程,那么声明一个共用变量,比如叫lock,则在主线程:
synchronized(lock) {
lock.wait();
}
(每次wait()都要synchronized,这是Java的一个准则)
然后再按钮点击的事件里:
synchronized(lock) {
lock.notify();
}
对了,不要直接调用wait(),因为那样等于调用this.wait(), 结果不堪设想。你要用一个其他的Object, 比如一个class里面的一个static变量:
public static final Object lock = new Object();
synchronized(lock) {
lock.wait();
}
(每次wait()都要synchronized,这是Java的一个准则)
然后再按钮点击的事件里:
synchronized(lock) {
lock.notify();
}
对了,不要直接调用wait(),因为那样等于调用this.wait(), 结果不堪设想。你要用一个其他的Object, 比如一个class里面的一个static变量:
public static final Object lock = new Object();
更多追问追答
追问
runevent1在主线程上,什么叫共用变量?
追答
共用变量就是两个线程都能访问的变量。这个放在哪取决于具体情况。比如:
class Utils {
public static final Object myLock = new Object();
}
那这个myLock就可以作为共用变量。两个线程都可以用Utils.myLock来访问这个变量。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
主线程停不了吧!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
主线程都让你停下来了,你如何能够点击按钮。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
主线程?
不是子线程?
不是子线程?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
鼠标点击暂停 在点击继续吗
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |