0
다음과 같은 구조의 Java 응용 프로그램을 구현하려고 시도했습니다. 내가 동영상 플레이어에서 스레드 비디오가 여전히 따옴표 양식의 상단에 재생 스레드 따옴표를 호출 할 때j2me 비디오 구성 요소 스레딩
내 문제가
- 이다.
액션 이벤트로 비디오 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();
}
}
}
감사합니다. 이 시나리오를 개선 할 수있는 다른 제안이 있으십니까? – ArK
EDT에 대해 읽어보십시오. 스레드를 자유롭게 사용할 수 있지만 Display.callSerially()를 사용하여 접근 할 수있는 LWUIT 스레드에서만 LWUIT을 변경해야합니다. invokeAndBlock을 사용하여보다 동적 인 코드를 생성 할 수도 있지만 그 자체의 주제입니다 (블로그에서 읽어보십시오). LWUIT EDT에 대한 인터넷 검색은 당신을 상당히 멀리해야합니다. –