Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.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 使用SwingWorker时,内部框架悬挂在主窗口外_Java_Swing_Vtk - Fatal编程技术网

Java 使用SwingWorker时,内部框架悬挂在主窗口外

Java 使用SwingWorker时,内部框架悬挂在主窗口外,java,swing,vtk,Java,Swing,Vtk,我是JavaSwing的初学者,遇到了一个我不知道为什么会发生的问题。 我想在桌面窗格中显示多个3D图像的内部帧,并在另一个线程中执行此操作,因此我使用的是SwingWorker。这些框架加载在桌面窗格中,但也挂在窗口外 [ 这些图像是由VTK渲染的,所以我不知道这是不是SwingWorker的问题,还是重量级/轻量级组件的混合问题 以下是swingworker(internalFrameWorker.java)的代码 公共类internalFrameWorker扩展SwingWorker{ 私

我是JavaSwing的初学者,遇到了一个我不知道为什么会发生的问题。 我想在桌面窗格中显示多个3D图像的内部帧,并在另一个线程中执行此操作,因此我使用的是SwingWorker。这些框架加载在桌面窗格中,但也挂在窗口外

[

这些图像是由VTK渲染的,所以我不知道这是不是SwingWorker的问题,还是重量级/轻量级组件的混合问题

以下是swingworker(internalFrameWorker.java)的代码

公共类internalFrameWorker扩展SwingWorker{
私有字符串[]文件;
私有整数x,y;
私有DropFilePane父级;
私有布尔完成;
私人展示架;
//建造师
公共internalFrameWorker(字符串[]文件名、int-posx、int-posy、DropFilePane窗格){
this.files=文件名;
这个.x=posx;
这个.y=posy;
this.parent=窗格;
}
@凌驾
受保护的Void doInBackground()引发异常{
for(字符串fn:文件){
plyframe=新的ShowPLY(x,y,fn);//ShowPLY输出一个JInternalFrame
plyframe.pack();
plyframe.setVisible(真);
parent.add(plyframe);
x+=20;
y+=20;
}
返回null;
}
}

任何帮助都将不胜感激! 谢谢!

“混合使用重量级/轻型组件。”这总是一个坏主意,但它们往往会产生图形故障。但由于重量级组件也有一个独立的绘制周期,它们可能会导致其他问题。此外,在您的
SwingWorker
中,您不应该从
doInBackground
方法中修改UI的状态,而应该使用
publish
通过
过程
方法“混合重量级/轻量级组件”将更新推送到UI这总是一个坏主意,但它们往往会产生图形故障。但由于重量级组件也有一个独立的绘制周期,它们可能会导致其他问题。此外,在您的
SwingWorker
中,您不应该从
doInBackground
方法中修改UI的状态,而应该使用
publish
通过
过程
方法将更新推送到UI
public class internalFrameWorker extends SwingWorker<Void, ShowPLY>{
    private String[] files;
    private int x, y;
    private DropFilePane parent;
    private boolean done;
    private ShowPLY plyframe;

// Constructor
public internalFrameWorker(String[] filenames, int posx, int posy, DropFilePane pane) {
    this.files = filenames;
    this.x = posx;
    this.y = posy;
    this.parent = pane;
}

@Override
protected Void doInBackground() throws Exception {

    for(String fn: files){
        plyframe = new ShowPLY(x, y, fn); // ShowPLY outputs a JInternalFrame
        plyframe.pack();
        plyframe.setVisible(true);
        parent.add(plyframe);
        x += 20;
        y += 20;
    }
    return null;

}