gpt4 book ai didi

java - 不断收到错误 "Component must be displayable"

转载 作者:行者123 更新时间:2023-11-30 05:06:49 28 4
gpt4 key购买 nike

您好,我不断收到错误“组件必须可显示”并且无法解决它,我查看了有关 SO 的问题并尝试了解决方案,但无济于事。我正在尝试实现 JVLC 播放器,当我在 Vid 类中尝试“.setVideoOutput(canvas1) ”时发生错误

这是主类。

import java.awt.Component;
import java.awt.Toolkit;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.util.logging.Level;
import java.util.logging.Logger;



/**
*
* @author Shane
*/
public class Main extends javax.swing.JFrame {

private LessonPanel lesson;
private MultiChoice multiChoice;
private Vid video;
private int xSize;
private int ySize;

public Main() throws InterruptedException {

Toolkit tk = Toolkit.getDefaultToolkit();

xSize = ((int) tk.getScreenSize().width/2);
ySize = ((int) tk.getScreenSize().height/2);
this.setSize(xSize, ySize);
this.setVisible(true);

System.out.print("\nIsDisplayable "+this.isDisplayable());
addVideo();


WindowListener listener = new WindowAdapter() {

@Override
public void windowClosing(WindowEvent w) {
System.exit(0);
}
};
this.addWindowListener(listener);
}

public void next(String method) throws InterruptedException{

if(method.equalsIgnoreCase("home")){home();}
else if(method.equalsIgnoreCase("Multi")){addMultiChoice();}
else if(method.equalsIgnoreCase("Video")){addVideo();}
else if(method.equalsIgnoreCase("Visual")){addVisual();}


}

public void removePanels(Component Comp,String doNext) throws InterruptedException {

this.remove(Comp);
this.repaint();

next(doNext);

}

public void home() throws InterruptedException {

lesson = new LessonPanel(this);
this.add(lesson);
this.validate();
this.repaint();
}

public void addMultiChoice() throws InterruptedException {

multiChoice = new MultiChoice(this);
this.add(multiChoice);
this.validate();
this.repaint();


}

public void addVideo() throws InterruptedException {
this.invalidate();
video = new Vid();
this.add(video);
this.validate();
this.repaint();


}

public void addVisual() throws InterruptedException {

}

public static void main(String args[]) {

java.awt.EventQueue.invokeLater(new Runnable() {

public void run() {
try {

new Main().setVisible(true);

} catch (InterruptedException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}



}
});



}
}

这就是给我错误的类

import java.awt.Canvas;
import java.awt.Color;
import org.videolan.jvlc.JVLC;


public class Vid extends javax.swing.JPanel
{

private static String filename ="C:/Users/Public/Videos/Sample Videos/Wildlife.wmv";
private Canvas canvas;


public Vid()
{
init();
}

public void init(){


System.out.print("\nReady to play video");
canvas = new java.awt.Canvas();
canvas.setBackground(Color.red);
canvas.setSize(400, 400);
canvas.setVisible(true);

add(canvas);



String[] arg = new String[4];
arg[0] = "--intf=dummy";
arg[1] = "--ignore-config";
arg[2] = "--no-plugins-cache";
arg[3] = "--plugin-path=plugins";




JVLC jvlc = new JVLC(arg);
jvlc.play(filename);
jvlc.setVideoOutput(canvas);


}

}

任何帮助都会很棒!提前致谢!!

最佳答案

我猜想当您尝试执行该方法时该面板不可见。您将组件添加到面板,但面板尚未添加到框架。重构您的代码,例如:

video = new Vid();
this.add(video);
this.revalidate(); //
this.repaint();
video.someMethodToInvoke "setVideoOutput"

关于java - 不断收到错误 "Component must be displayable",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4830567/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com