2011-09-02 46 views
0

我试图实现已以下结构的Java应用程序。与视频分量J2ME线程

enter image description here

我的问题是

  1. 当调用报价从录像机线程线程的视频仍然发挥的报价形式的顶部。

  2. 当我改变视频的网址与行动的事件,它只是附加与目前的一个新的球员。 ex。当我按下视频2按钮时,视频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试图无缝地暂停视频播放器,以便在用户界面上进行对话。

作为附注,LWUIT不是线程安全的,并且您不能使用单独的线程来访问UI,因为它会在不同的平台上使用打破

+0

谢谢shai。你有什么其他建议可以帮助我改进这种情况。 – ArK

+0

尝试阅读有关EDT的内容,可以自由使用线程,但请确保仅使用Display.callSerially()可以访问的LWUIT线程来变更LWUIT。您也可以使用invokeAndBlock创建更多动态代码,但这是它自己的主题(请在博客中阅读它)。谷歌搜索LWUIT美国东部时间应该让你很远。 –