【问题标题】:Exception in "AWT-EventQueue-0" java.lang.NullPointerException“AWT-EventQueue-0”中的异常 java.lang.NullPointerException
【发布时间】:2014-05-30 18:06:42
【问题描述】:

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

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

【问题讨论】:

  • (Client.java:62) 行号是什么?
  • 由注释标记 /*这是第 62 行 */

标签: java nullpointerexception vlcj jlayeredpane awt-eventqueue


【解决方案1】:

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

static JPanel mainPanel, glassPane = new JPanel();

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

static JPanel mainPanel = new JPanel(), glassPane = new JPanel();

【讨论】:

  • 我会选择@David Xu 作为最佳答案,因为他首先调用了它,但你是绝对正确的。执行顺利!非常感谢大家!
  • @NickMedovich 如你所愿,他打败了我 :)。
【解决方案2】:

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

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

【讨论】:

  • 我在 main 方法上方静态初始化每个面板:JPanel mainPanel, glassPane = new JPanel();
  • 该行抛出 NPE 的唯一方法是 mainPanel 为空。
  • 好吧,至少现在表格显示出来了。将 mainPanel 初始化添加到它自己的行使表单显示出来。现在我只需要弄清楚为什么视频没有加载。非常感谢!!
  • 只是为了把它扔出去,我根本没有将 mainPanel 添加到框架中。我将 mainPanel 添加到 JLayeredPanel,将 glassPane 添加到顶部,然后将整个 JLayeredPanel 添加到框架中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-21
  • 2013-12-09
  • 1970-01-01
  • 1970-01-01
  • 2011-02-03
  • 2015-06-24
  • 1970-01-01
相关资源
最近更新 更多