0

这个程序接受一个字符串作为参数。目前填写:

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

2 回答 2

2

mainPanel尚未初始化,即使它看起来已经初始化。你有这个代码:

static JPanel mainPanel, glassPane = new JPanel();

这只会初始化glassPane。为了初始化mainPanel,您必须将代码更改为:

static JPanel mainPanel = new JPanel(), glassPane = new JPanel();
于 2014-05-30T18:18:41.773 回答
1

您还没有初始化 mainPanel。尝试添加 mainPanel = new JPanel(); 错误线上方。

您还需要调用 frame.add(mainPanel); 初始化面板后。

于 2014-05-30T18:08:29.883 回答