“AWT-EventQueue-0”中的异常java.lang.NullPointerException

时间:2014-05-30 18:06:43

标签: java nullpointerexception vlcj jlayeredpane awt-eventqueue

此程序接受参数的字符串。目前填写:

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

2 个答案:

答案 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);初始化面板后。