您好我一直收到错误“组件必须可显示”并且无法解决它我查看了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);
}
}
任何帮助都会很棒!!提前谢谢!!
答案 0 :(得分:2)
当您尝试执行该方法时,我猜测该面板不可见。您将组件添加到面板,但面板尚未添加到框架中。重构您的代码,如:
video = new Vid();
this.add(video);
this.revalidate(); //
this.repaint();
video.someMethodToInvoke "setVideoOutput"