2011-09-02 2 views
0

다음과 같은 구조의 Java 응용 프로그램을 구현하려고 시도했습니다. 내가 동영상 플레이어에서 스레드 비디오가 여전히 따옴표 양식의 상단에 재생 스레드 따옴표를 호출 할 때j2me 비디오 구성 요소 스레딩

enter image description here

내 문제가

  1. 이다.

  2. 액션 이벤트로 비디오 URL을 변경하면 현재 플레이어에 새 플레이어가 추가됩니다. 예. video2는 비디오 2 버튼을 누르면 현재 실행중인 비디오 1과 함께 추가됩니다.

.

class VideoPlayer implements Runnable,ActionListener{ 
     private videoappMidlet MIDlet; 
     VideoComponent vc; 
     Button Videos,quotes,video1,video2,video3; 
     Form videoplayer; 
     Thread thread; 
     public VideoPlayer(videoappMidlet MIDlet){ 
     this.MIDlet = MIDlet; 
     } 

     public void run(){ 
     try{ 
     videoplayer=new Form(); 
     video1=new Button("video1"); 
     ....... 

     vc = VideoComponent.createVideoPeer("http://localhost/video1.mpg"); 
     vc.start(); 

     quotes.addActionListener((ActionListener) this); 
     ........ 

     videoplayer.addComponent(vc); 
     ........ 

     videoplayer.show(); 

     }catch(Exception error){ 
     System.err.println(error.toString()); 
     } 
     } 

     public void start(){ 
     thread = new Thread(this); 
     try{ thread.start();} 
     catch(Exception error){} 
     } 

     public void actionPerformed(ActionEvent ae) { 
      if((ae.getSource()==Quotes)) 
      { 
       Quotes tp = new Quotes(this.MIDlet); 
       tp.start(); 
      } 
      if(ae.getSource()==video1) 
      { 
       try { 
        vc = VideoComponent.createVideoPeer("http://localhost/video1.mpg"); 
        vc.start(); 
       } catch (IOException ex) { 
        ex.printStackTrace(); 
       } 
      } 
      .... 
     } 

    } 


    class Quotes implements Runnable,ActionListener { 
     private videoappMidlet MIDlet; 
     Button Videos,quotes; 
     Form quote; 
     Thread thread; 
     public Quotes(videoappMidlet MIDlet){ 
     this.MIDlet = MIDlet; 
     } 

     public void run(){ 
     try{ 
     quote=new Form(); 
     Videos=new Button("Videos"); 
     ........ 

     quote.addComponent(Videos); 
     ........ 

     Videos.addActionListener(this); 
     ........ 

     quote.show(); 
     }catch(Exception error){ 
     System.err.println(error.toString()); 
     } 
     } 

     public void start(){ 
     thread = new Thread(this); 
     try{ thread.start();} 
     catch(Exception error){} 
     } 

     public void actionPerformed(ActionEvent ae) { 
      if(ae.getSource()==Videos) 
      { 
      VideoPlayer vp = new VideoPlayer(this.MIDlet); 
      vp.start(); 
      } 
     } 
    } 


    public class videoappMidlet extends MIDlet implements ActionListener{ 
     Button play,quote; 
     Form home; 
     public void startApp() { 
      Display.init(this); 
      home=new Form(); 

      play.addActionListener(this); 
      quote.addActionListener(this); 
      home.show(); 
     } 
     public void actionPerformed(ActionEvent ae) {  
      if(ae.getSource()==play) 
      { 
      VideoPlayer vp = new VideoPlayer(this); 
      vp.start(); 
      } 
      if(ae.getSource()==quote) 
      { 
      Quotes tp = new Quotes(this); 
      tp.start(); 
      } 
     } 
    } 

답변

2

일반적으로 JavaME의 비디오는 재생중인 레이어에 대해 보장하지 않습니다. LWUIT는 UI 위에 대화 상자와 같은 것들을 위해 비디오 플레이어를 중단 시키려고합니다.

보조 노트 LWUIT은 스레드 안전하지 않으므로 은 다른 플랫폼에서을 깨뜨리기 때문에 UI에 액세스하기 위해 별도의 스레드를 사용하지 않아야합니다.

+0

감사합니다. 이 시나리오를 개선 할 수있는 다른 제안이 있으십니까? – ArK

+0

EDT에 대해 읽어보십시오. 스레드를 자유롭게 사용할 수 있지만 Display.callSerially()를 사용하여 접근 할 수있는 LWUIT 스레드에서만 LWUIT을 변경해야합니다. invokeAndBlock을 사용하여보다 동적 인 코드를 생성 할 수도 있지만 그 자체의 주제입니다 (블로그에서 읽어보십시오). LWUIT EDT에 대한 인터넷 검색은 당신을 상당히 멀리해야합니다. –