这个程序接受一个字符串作为参数。目前填写:
"http://localhost/media/svu.mp4"
我已确保 URL 存在。
我正在使用 VLCj 库来创建 mediaPlayerComponent(放置在容器 (JPanel mainPanel) 内)。然后将组件 mainPanel 放置在 JLayeredPanel 层内。最重要的是,我放置了一个透明(非不透明)层(JPanel glassPane)。根据我读过的所有内容,这应该可以正常工作,并且 Eclipse 没有显示任何错误或警告。
堆栈跟踪如下:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at client.test.Client.<init>(Client.java:62)
at client.test.Client$1.run(Client.java:44)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
....
代码如下。第 62 行标有注释。JPanels 和 JLayeredPanel 以及 windowDimensions 都是在我的代码中作为 main 方法上方的静态对象创建的。
非常感谢任何和所有帮助。
static JLayeredPane layers = new JLayeredPane();
static JPanel mainPanel, glassPane = new JPanel();
public Client(String toPlay) {
JFrame frame = new JFrame("Client");
mediaPlayerComponent = new EmbeddedMediaPlayerComponent();
MediaPlayer mediaPlayer= mediaPlayerComponent.getMediaPlayer();
frame.setSize(windowDimensions[0], windowDimensions[1]);
frame.setLayout(new BorderLayout());
frame.setExtendedState(frame.getExtendedState() | JFrame.MAXIMIZED_BOTH);
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(layers, BorderLayout.CENTER);
layers.setBounds(0,0,windowDimensions[0], windowDimensions[1]);
mainPanel.setBackground(Color.black); /* This is line 62 */
mainPanel.setBounds(0,0,windowDimensions[0], windowDimensions[1]);
mainPanel.setOpaque(true);
mainPanel.add(mediaPlayerComponent);
glassPane.setBackground(Color.white);
glassPane.setBounds(0,0,windowDimensions[0], windowDimensions[1]);
glassPane.setOpaque(false);
layers.add(mainPanel, new Integer(0), 0);
layers.add(glassPane, new Integer(1), 0);
frame.setVisible(true);
mediaPlayer.playMedia(toPlay);
}