1

jmf를 사용하여 비디오를 재생하려고합니다. 말 그대로 모든 오류와 예외를 제거하기 위해 열심히 노력한 후 여기에 널 포인터 예외가 발생합니다. 여기서 NullPointerException을 살펴본 결과, PlayerPlayer의 선언이 올바르지 않아야한다는 것을 알았습니다. MediaPlayer는 초기화되지 않았습니다.nullpointerexception을 제거하는 방법

내가 나중에 제공하는 값으로 직접 초기화하는 또 다른 문제는 예외도 잡아야한다는 것입니다. 그러면 플레이어가 선언되지 않을 수도 있습니다.

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을 제거하는 저를 도와주세요. 내 문제에 어떤 노력을했는지 모두에게 고마워. :).

+0

Player가 인터페이스이므로이 Player Player 인스턴스와 같이 인스턴스화 해보십시오. http://docs.oracle.com/cd/E17802_01/j2se/javase/technologies/desktop/media/jmf/2.1. 1/apidocs/javax/media/Player.html –

답변

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

크레딧 - 앤드류 톰슨 코드를 변경

.

+0

이 작동하지만 지금은 새로운 예외를 제공, 나는 질문을 편집 오전 참조하십시오. –

0

플레이어가 인터페이스이므로 플레이어를 만들 수 없습니다. 대신 Manager.createPlayer (source) 메소드를 사용하여 작업하십시오. 여기 링크입니다, link

+0

MediaLocator 미디어 사용 = new MediaLocator (문자열 파일 경로) 다음 player = Manager.createPlayer (미디어); –

0

JMF 2.1.1 - Supported Formats 페이지를 확인하면 MP4에 대한 언급이 뚜렷하지 않음을 알 수 있습니다. 이론적으로는 MP4 파일에 대한 서비스 공급자 인터페이스를 얻고이를 런타임 클래스 경로에 추가하는 것으로 '간단한'것으로 문제를 해결하십시오.

결론은이 프로젝트가 빌드되어 있거나 SPI를 제공 할 수있는 제한된 그룹의 형식을 재생하는 것이면 좋을 것입니다. OTOH JMF는 이 아니며은 '범용 플레이어'로 적합하지 않습니다. 너무 오래되었습니다 & 너무 적은 형식을 지원합니다.

+0

'.mov'와'.avi' 형식도 시도했습니다. 그러나 그들은 또한 동일한 예외를 보여준다. –

+0

'JMF friendly'[media files 페이지] (http://pscode.org/media/#video)에서 MOV 및 MPEG 파일 중 일부를 사용해보십시오. 파일 확장자가 전부는 아닙니다. AVI/MOV/MPEG조차도 다른 방식으로 인코딩 될 수 있습니다. JMF는 일부 인코딩 유형을 지원하지만 다른 포맷은 지원하지 않습니다. 또한 위의 두 가지 상황 중 어느 것이 당신이 인코딩 한 파일을 사용하여 JMF를 사용해야하는지 알려주는데 도움이됩니다. 2) 범용 플레이어. 무엇 이니? –

+0

날 인코딩 된 파일. 그리고 저는 고정 형식을 사용하지 않을 것입니다. 플레이어는 전혀 범용 적이 아닙니다. 한 파일 만 재생해야합니다. @AndrewThompson –

관련 문제