开发者

Keep getting an Error "Component must be displayable"

Hi I keep getting an error "Component must be displayable" and cant solve it I looked at the Questions on SO and tried the solutions but to no avail. I'm trying to implement a JVLC player the error occurs when I try " .setVideoOutput(canvas1) " in the Vid class

here is the main class.

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 Com开发者_如何学运维p,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);
                }



            }
        });



    }
}

and this is the the class that is giving me the error

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);


       }

}

Any help would be great!! thanks in advance!!


I would guess the panel is not visible when you attempt to execute that method. You add the component to the panel but the panel has not yet been added to the frame. Restructure your code something like:

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜