此程序接受参数的字符串。目前填写:
"http://localhost/media/svu.mp4"
我已确定网址存在。
我正在使用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都是在我的代码中作为主方法之上的静态对象创建的。
非常感谢任何和所有帮助。
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);
}
答案 0 :(得分:2)
mainPanel
尚未进行初始化,即使它看起来已经初始化。你有这个代码:
static JPanel mainPanel, glassPane = new JPanel();
这只会启动glassPane
。要初始化mainPanel
,您必须将代码更改为:
static JPanel mainPanel = new JPanel(), glassPane = new JPanel();
答案 1 :(得分:1)
您尚未初始化mainPanel。尝试添加mainPanel = new JPanel();在误差线上方。
你还需要调用frame.add(mainPanel);初始化面板后。