【问题标题】:How do I remove nullpointerexception如何删除空指针异常
【发布时间】:2013-07-27 12:09:04
【问题描述】:

我正在尝试使用 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();
        }
    }

更新2

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。非常感谢所有为我的问题付出任何努力的人:)。

【问题讨论】:

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


【解决方案1】:

把你的代码改成这个,

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

学分-安德鲁·汤普森。

【讨论】:

  • 这可行,但现在它给出了一个新的例外,我正在编辑问题,请参阅。
【解决方案2】:

Player 是一个接口,所以你不能创建它的对象。而是使用 Manager.createPlayer(source) 方法让您的工作。 这是链接,link

【讨论】:

  • 使用 MediaLocator media=new MediaLocator(String file path) 然后 player=Manager.createPlayer(media);
【解决方案3】:

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

底线是,如果这个项目是为了播放一组有限的格式,或者是内置的,或者我们可以提供一个 SPI,那应该没问题。 OTOH JMF 适合作为“通用播放器”。它太旧了,支持的格式太少了。

【讨论】:

  • 我也尝试过.mov.avi 格式。但它们也显示出相同的例外情况。
  • 在我的“JMF 友好”media files page 上尝试一些 MOV 和 MPEG 文件。请注意,文件扩展名并不是全部。甚至 AVI/MOV/MPEG 也可以以不同的方式编码,JMF 支持某些编码类型,但不支持其他编码类型。如果您让我知道您需要将 JMF 用于 1) 使用您编码的文件,这也会有所帮助。 2)作为通用播放器。是哪个?
  • 我编码的文件。而且我将使用固定格式,而不是其他任何格式。播放器根本不是通用的。只需播放一个文件。 @安德鲁汤普森
  • 感谢您的确认。让我知道您如何处理我网站上的媒体文件。
  • 感谢您的耐心等待。但是您网站上的视频也显示了例外情况,我将在问题中将它们添加为 update2。
猜你喜欢
  • 1970-01-01
  • 2016-11-19
  • 2014-02-15
  • 2014-09-06
  • 1970-01-01
  • 2015-07-12
相关资源
最近更新 更多