2011-08-26 9 views
1

애플릿에 VLC 플레이어를 기본적으로 포함시키는 VLCJ (http://code.google.com/p/vlcj/)를 실행하는 애플릿이 있습니다. Eclipse에서 실행하면 잘 실행되지만 디버깅 애플릿 창을 닫거나 종료 할 수 없습니다. 궁금해, 왜 이래? 디버깅을 막지 못하게하는 코드가 있습니까? 나는 그것을 종료하기 위해 이클립스를 다시 시작해야합니다. 임 확실히 당신은 디버깅 창을 닫을 수 있도록 destroy()를 추가 할 필요가 없다. 이 시스템에 반환하지 않기 때문에 폐쇄에서애플릿을 Eclipse에서 닫을 수 없습니다.

try { 
    Thread.currentThread().join(); 
} catch (InterruptedException e1) { 
    // TODO Auto-generated catch block 
    e1.printStackTrace(); 
} 

그것은 블록 응용 프로그램 : 그 이유는이 코드에있다

감사

import java.awt.BorderLayout; 
import java.awt.Canvas; 
import java.awt.Frame; 
import javax.swing.JApplet; 
import java.awt.event.WindowAdapter; 
import java.awt.event.WindowEvent; 

import com.sun.jna.NativeLibrary; 

import uk.co.caprica.vlcj.player.MediaPlayerFactory; 
import uk.co.caprica.vlcj.player.embedded.EmbeddedMediaPlayer; 


public class Main extends JApplet { 

    /** 
    * @param args 
    */ 
    /* entry point */ 
    public void init() { 
     String file = "110825-155446.wmv"; // only 2-3 seconds clip for minimum storage  
     runVideo(file); 
    } 

    /* runs the video file */ 
    public void runVideo(String file) { 

     setSize(400,300); 
     setLayout(new BorderLayout()); 
     Canvas vs = new Canvas(); 
     add(vs,BorderLayout.CENTER); 
     setVisible(true); 

     MediaPlayerFactory factory = new MediaPlayerFactory(); 

     EmbeddedMediaPlayer mediaPlayer = factory.newEmbeddedMediaPlayer(); 
     mediaPlayer.setVideoSurface(factory.newVideoSurface(vs)); 

     mediaPlayer.playMedia(file); 
     try { 
      Thread.currentThread().join(); 
     } catch (InterruptedException e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 
     } 

    } 


} 

답변

1

이 부분을 니펫을. Thread.join() 현재 스레드가 다른 스레드가 완료 될 때까지 대기하게합니다. 기본적으로 영원히 기다립니다.

을 개선하기 위해, 당신은 다음과 같이 할 수있다 (http://code.google.com/p/vlcj/wiki/MinimalMp3Player 같이) : 그러나

mediaPlayer.addMediaPlayerEventListener(new MediaPlayerEventAdapter() { 
    public void finished(MediaPlayer mediaPlayer) { 
    System.exit(0); 
    } 
    public void error(MediaPlayer mediaPlayer) { 
    System.exit(1); 
    } 
}); 
mediaPlayer.playMedia(args[0]); 
Thread.currentThread().join(); 

, 우리는 System.exit() 자바 서블릿 코드에서 방법 (또는 애플릿 코드)를 사용할 수 없습니다가 셧다운 JVM을 할 수있는 다른 Java 응용 프로그램/서블릿/애플릿 코드에서 필요할 수있는 코드에서 사용됩니다. Alternatives to System.exit(1), Calling System.exit() in Servlet's destroy() method

을 참조하십시오.
관련 문제