如何删除nullpointerexception

时间:2013-07-27 12:09:05

标签: java nullpointerexception video-streaming media-player jmf

我正在尝试使用jmf播放视频。经过几个小时努力删除所有错误和异常,在这里我得到一个空指针异常。在我查看NullPointerException之后我想到了这应该是由于Player mediaPlayer的错误声明,它没有被初始化为任何东西。

直接将其初始化为我后来给出的值的另一个问题是,我必须捕捉异常,然后它说播放器可能没有声明。

如何声明mediaURLPlayer以便删除此nullpointerexception并播放此视频。

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.Graphics;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.media.*;
import java.net.URL;
import java.io.*;
import java.net.MalformedURLException;


    public class mediaPlayer extends JFrame
    {

    URL mediaURL;
    Player mediaPlayer;
        public mediaPlayer()
        {   
            JFrame f = new JFrame("new");
            f.setLayout(new BorderLayout());
            f.setSize(500,300);
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            //file you want to play
            try{
            String name = "file:///"+new File("output.mp4").getAbsolutePath();
                mediaURL = new URL(name);
            }catch (MalformedURLException ex){}
            //create the media player with the media url
            try{
                mediaPlayer = Manager.createRealizedPlayer(mediaURL);
            }catch(IOException ex){} catch(NoPlayerException ex){} catch(CannotRealizeException ex){}
            //get components for video and playback controls
            Component video = mediaPlayer.getVisualComponent();
            Component controls = mediaPlayer.getControlPanelComponent();
            add(video,BorderLayout.CENTER);
            add(controls,BorderLayout.SOUTH);
            f.setVisible(true);

        }
        public static void main(String[] args){
            new mediaPlayer();
        }
    }

UPDATE2

javax.media.NotRealizedError: Cannot get visual component on an unrealized playe
r
        at com.sun.media.BasicPlayer.getVisualComponent(BasicPlayer.java:491)
        at com.sun.media.MediaPlayer.getVisualComponent(MediaPlayer.java:48)
        at mediaPlayer.<init>(mediaPlayer.java:29)
        at mediaPlayer.main(mediaPlayer.java:38)
Exception in thread "main" javax.media.NotRealizedError: Cannot get visual compo
nent on an unrealized player
        at com.sun.media.BasicPlayer.getVisualComponent(BasicPlayer.java:491)
        at com.sun.media.MediaPlayer.getVisualComponent(MediaPlayer.java:48)
        at mediaPlayer.<init>(mediaPlayer.java:29)
        at mediaPlayer.main(mediaPlayer.java:38)

请帮我播放此视频,删除此nullpointer exception。非常感谢所有为我的问题付出努力的人:)。

3 个答案:

答案 0 :(得分:0)

播放器是一个接口,因此您无法创建其对象。而是使用Manager.createPlayer(source)方法来实现您的工作。 这是链接link

答案 1 :(得分:0)

将您的代码更改为此

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.Graphics;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.media.*;
import java.net.URL;
import java.io.*;
import java.net.MalformedURLException;


    public class mediaPlayer extends JFrame
    {
        public mediaPlayer()
        {   
        JFrame f = new JFrame("Video Demo");
            f.setLayout(new BorderLayout());
            f.setSize(500,300);
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            //file you want to play
            try{
                String name = "file:///"+new File("output.mp4").getAbsolutePath();
                URL mediaURL = new URL(name);
                Player mediaPlayer = Manager.createRealizedPlayer(mediaURL);
            //get components for video and playback controls
            Component video = mediaPlayer.getVisualComponent();
            Component controls = mediaPlayer.getControlPanelComponent();
            f.add(video,BorderLayout.CENTER);
            f.add(controls,BorderLayout.SOUTH);
            } catch (Exception e) { e.printStackTrace(); }
            f.setVisible(true);

        }
        public static void main(String[] args){
            new mediaPlayer();
        }
    }

Credits-Andrew Thompson。

答案 2 :(得分:0)

如果您查看JMF 2.1.1 - Supported Formats页面,您会发现MP4明显缺乏提及。从理论上讲,将问题解决为获取MP4文件的服务提供程序接口时的“简单”,并将其添加到运行时类路径中。

最重要的是,如果这个项目是为了播放内置的有限格式,或者我们可以提供SPI,那么应该没问题。 OTOH JMF 适合作为“通用玩家”。它太老了&amp;支持的格式太少了。