【发布时间】:2012-05-17 03:55:39
【问题描述】:
我正在尝试在 JPanel 中使用 vlcj 播放视频,但它对我不起作用。我得到的消息异常是“java.lang.IllegalStateException:视频表面组件必须是可显示的”,这与Keep getting an Error "Component must be displayable"中的问题相同。
包含画布和vlcj播放器的JPanel代码如下:
import javax.swing.JPanel;
import com.sun.jna.Native;
import com.sun.jna.NativeLibrary;
import java.awt.Canvas;
import java.awt.Color;
import uk.co.caprica.vlcj.binding.LibVlc;
import uk.co.caprica.vlcj.player.MediaPlayerFactory;
import uk.co.caprica.vlcj.player.embedded.EmbeddedMediaPlayer;
import uk.co.caprica.vlcj.player.embedded.videosurface.CanvasVideoSurface;
import uk.co.caprica.vlcj.runtime.RuntimeUtil;
import uk.co.caprica.vlcj.runtime.windows.WindowsCanvas;
public class MyJPanel extends JPanel {
private EmbeddedMediaPlayer player;
private WindowsCanvas canvas;
public MyJPanel() {
canvas = new WindowsCanvas();
add(canvas);
revalidate();
repaint();
canvas.setVisible(true);
MediaPlayerFactory mediaPlayerFactory = new MediaPlayerFactory();
player = mediaPlayerFactory.newEmbeddedMediaPlayer();
CanvasVideoSurface videoSurface = mediaPlayerFactory.newVideoSurface(canvas);
player.setVideoSurface(videoSurface);
player.playMedia("v.avi"); // This sentence throws the exception.
}
}
MyJFrame 扩展了 JFrame 并且仅包含 MyJPanel JPanel。我认为这根本不重要。
import javax.swing.JFrame;
public class MyJFrame extends JFrame {
protected MyJPanel myJPanel;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
MyJFrame frame = new MyJFrame();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public MyJFrame() {
myJPanel = new myJPanel();
add(myJPanel);
}
}
提前致谢。
【问题讨论】:
-
我可以问十几个问题,但它们都会在 1 SSCCE 中得到解答。为什么不发布 SSCCE?
-
@AndrewThompson 已编辑。谢谢。
-
O...K 这两个来源中的哪一个是 SSCCE?
-
@AndrewThompson 第一个。
-
第一个没有主。将两者合并为一个源代码如 SSCCE 文档所述。如果需要,请继续浪费您的时间,但请停止浪费我的时间。 :(