首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在eclipse中关闭小程序

无法在eclipse中关闭小程序
EN

Stack Overflow用户
提问于 2011-08-26 20:08:57
回答 1查看 1.5K关注 0票数 1

我有一个运行VLCJ (http://code.google.com/p/vlcj/)的小程序-基本上是在一个小程序中嵌入一个VLC播放器。当在eclipse中运行时,它运行得很好,但我无法关闭调试小程序窗口或以某种方式终止它。我想知道为什么会这样?代码中是否有阻止它停止调试的内容?我必须重启eclipse才能让它退出。我非常确定你不需要添加destroy()来关闭调试窗口。

谢谢

代码语言:javascript
复制
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();
        }

    }


}
EN

回答 1

Stack Overflow用户

发布于 2011-11-15 09:03:37

原因在于以下代码片段部分:

代码语言:javascript
复制
try {
    Thread.currentThread().join();
} catch (InterruptedException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
}

它阻止应用程序关闭,因为它不想返回到系统。Thread.join()使当前线程等待另一个线程完成,基本上它永远等待。

要改进它,您可以这样做(就像在http://code.google.com/p/vlcj/wiki/MinimalMp3Player中一样):

代码语言:javascript
复制
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();

但是,我们不能在Java servlet代码(甚至applet代码)中使用System.exit()方法,因为它会关闭其他Java应用程序/servlet/applet代码可能需要的代码所使用的JVM。请参阅Alternatives to System.exit(1)Calling System.exit() in Servlet's destroy() method

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7204425

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档