Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java display.async和平滑转换_Java_Multithreading_Swt - Fatal编程技术网

Java display.async和平滑转换

Java display.async和平滑转换,java,multithreading,swt,Java,Multithreading,Swt,我有一个自定义小部件,当鼠标悬停时可以更改背景。这是很好的工作,但我想有没有背景和悬停背景之间的平稳过渡。它将与GC.setAlpha()一起使用,但是: Display.getDefault().asyncExec(new Runnable() { public void run() { for (int i=0;i<255;i++) { setBG(BGHelper(imgHover,i)); //i - alpha

我有一个自定义小部件,当鼠标悬停时可以更改背景。这是很好的工作,但我想有没有背景和悬停背景之间的平稳过渡。它将与
GC.setAlpha()
一起使用,但是:

Display.getDefault().asyncExec(new Runnable() {
    public void run() {
        for (int i=0;i<255;i++) {
            setBG(BGHelper(imgHover,i)); //i - alpha
            try {
                Thread.sleep(1);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }   
});
Display.getDefault().asyncExec(新的Runnable()){
公开募捐{

对于(inti=0;i这不起作用,因为只要您在代码中,SWT就不会重新绘制或更改组件

您应该在单独的线程中完成这项工作,并为每次更改调用
Display.asyncExec

for (int i = 0; i < 255; i++) {
    final int x = i;
    Display.getDefault().asyncExec(new Runnable() {
        public void run() {
            setBG(BGHelper(imgHover,x)); //x - alpha
        }
    });
    try {
        Thread.sleep(1);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}
for(int i=0;i<255;i++){
最终整数x=i;
Display.getDefault().asyncExec(新的Runnable()){
公开募捐{
setBG(bgheloper(imgHover,x));//x-alpha
}
});
试一试{
睡眠(1);
}捕捉(中断异常e){
e、 printStackTrace();
}
}

这无法工作,因为只要您在代码中,SWT就不会重新绘制或更改组件

您应该在单独的线程中完成这项工作,并为每次更改调用
Display.asyncExec

for (int i = 0; i < 255; i++) {
    final int x = i;
    Display.getDefault().asyncExec(new Runnable() {
        public void run() {
            setBG(BGHelper(imgHover,x)); //x - alpha
        }
    });
    try {
        Thread.sleep(1);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}
for(int i=0;i<255;i++){
最终整数x=i;
Display.getDefault().asyncExec(新的Runnable()){
公开募捐{
setBG(bgheloper(imgHover,x));//x-alpha
}
});
试一试{
睡眠(1);
}捕捉(中断异常e){
e、 printStackTrace();
}
}

您能更详细地描述一下“它不显示平滑过渡”的含义吗?我希望看到从alpha 0到255的平滑过渡(不可见),但当我悬停我的小部件时,需要1*255毫秒,我可以看到完全可见的图像(无步骤)。
可运行的
是(最终)由UI线程执行,您正在使用
thread.sleep()
暂停该线程。请使用
计时器来定期更新alpha。您能否更详细地描述一下“它不显示平滑过渡”的含义?我希望看到从alpha 0到255的平滑过渡(不可见到可见),但当我悬停我的小部件时,它需要1*255毫秒,我可以看到完全可见的图像(无步骤)。
Runnable
最终由UI线程执行,您将使用
thread.sleep()
。使用
计时器来定期更新alpha。