3 个解决方案
#1
不要在UI线程中执行那个死循环就行了,只有在调label.setText()的时候,才去用display.async方法去调用UI现成的东西
代码可以发上来看看
代码可以发上来看看
#2
我是这样搞的:
在ui里创建了一个内部线程类,然后线程掉的label.setText();去刷新时间、
class TimeChange extends Thread
{
public void run()
{
for(;;)
{
try{
sleep(1000);
}catch{}
label.setText();
}
}
}
shell.getDisplay().asyncExec(timeChange);
在ui里创建了一个内部线程类,然后线程掉的label.setText();去刷新时间、
class TimeChange extends Thread
{
public void run()
{
for(;;)
{
try{
sleep(1000);
}catch{}
label.setText();
}
}
}
shell.getDisplay().asyncExec(timeChange);
#3
这样肯定会卡UI线程啊,
shell.getDisplay().asyncExec本身的意思并非起一个线程,UI线程只有一个,这个调用的代码意思是把参数里的那个那些代码放到UI线程中执行,你却在这里面去sleep,当然会卡死..
要注意,runnable本身只是一个非常普通的接口,不是线程;
class TimeChange extends Thread
{
public void run()
{
for(;;)
{
try{
sleep(1000);
}catch{}
shell.getDisplay().asyncExec(new Runnable(){
public void run() {
label.setText();
}
});
}
}
}
new TimeChange().start();
shell.getDisplay().asyncExec本身的意思并非起一个线程,UI线程只有一个,这个调用的代码意思是把参数里的那个那些代码放到UI线程中执行,你却在这里面去sleep,当然会卡死..
要注意,runnable本身只是一个非常普通的接口,不是线程;
#1
不要在UI线程中执行那个死循环就行了,只有在调label.setText()的时候,才去用display.async方法去调用UI现成的东西
代码可以发上来看看
代码可以发上来看看
#2
我是这样搞的:
在ui里创建了一个内部线程类,然后线程掉的label.setText();去刷新时间、
class TimeChange extends Thread
{
public void run()
{
for(;;)
{
try{
sleep(1000);
}catch{}
label.setText();
}
}
}
shell.getDisplay().asyncExec(timeChange);
在ui里创建了一个内部线程类,然后线程掉的label.setText();去刷新时间、
class TimeChange extends Thread
{
public void run()
{
for(;;)
{
try{
sleep(1000);
}catch{}
label.setText();
}
}
}
shell.getDisplay().asyncExec(timeChange);
#3
这样肯定会卡UI线程啊,
shell.getDisplay().asyncExec本身的意思并非起一个线程,UI线程只有一个,这个调用的代码意思是把参数里的那个那些代码放到UI线程中执行,你却在这里面去sleep,当然会卡死..
要注意,runnable本身只是一个非常普通的接口,不是线程;
class TimeChange extends Thread
{
public void run()
{
for(;;)
{
try{
sleep(1000);
}catch{}
shell.getDisplay().asyncExec(new Runnable(){
public void run() {
label.setText();
}
});
}
}
}
new TimeChange().start();
shell.getDisplay().asyncExec本身的意思并非起一个线程,UI线程只有一个,这个调用的代码意思是把参数里的那个那些代码放到UI线程中执行,你却在这里面去sleep,当然会卡死..
要注意,runnable本身只是一个非常普通的接口,不是线程;