【问题标题】:Cannot close applet in eclipse无法在eclipse中关闭小程序
【发布时间】:2011-08-26 12:08:56
【问题描述】:

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

谢谢

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();
        }

    }


}

【问题讨论】:

    标签: java eclipse applet libvlc vlcj


    【解决方案1】:

    原因在这段代码sn-p部分:

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

    它阻止应用程序关闭,因为它不想返回系统。 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();
    

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

    【讨论】:

      猜你喜欢
      • 2022-11-19
      • 1970-01-01
      • 1970-01-01
      • 2010-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-22
      • 2014-10-23
      相关资源
      最近更新 更多