从eclipse导出后,Java程序不起作用

时间:2014-12-07 17:12:33

标签: java eclipse

当我打开runnable jar文件时,它仍然可以打开但是在这样的半秒之后就会卡住。 (我无法发布图片,因此我在此处发布图片:https://pbs.twimg.com/media/B4RN2_MCYAAi1DD.png

它在日食中运作良好。 当我在CMD中运行时,它说:

Exception in thread "game" java.lang.NullPointerException: in
        at javazoom.jl.decoder.Bitstream.<init>(Unknown Source)
        at javazoom.jl.player.Player.<init>(Unknown Source)
        at javazoom.jl.player.Player.<init>(Unknown Source)
        at lian.xiangru.game.AudioHandler.<init>(AudioHandler.java:12)
        at lian.xiangru.game.GameBoard.playSound(GameBoard.java:410)
        at lian.xiangru.game.GameBoard.move(GameBoard.java:224)
        at lian.xiangru.game.GameBoard.moveTiles(GameBoard.java:271)
        at lian.xiangru.game.GameBoard.checkKeys(GameBoard.java:340)
        at lian.xiangru.game.GameBoard.update(GameBoard.java:146)
        at lian.xiangru.game.Game.update(Game.java:42)
        at lian.xiangru.game.Game.run(Game.java:77)
        at java.lang.Thread.run(Unknown Source)

我的资源似乎出了问题。

这是我的playSound方法:

    private void playSound() {
    // how to play mp3 https://www.youtube.com/watch?v=f-7cgX_I220
    AudioHandler sound = new AudioHandler(
            SOUND_LIST[(int) Math.round((Math.log(highestValue) / Math.log(2))) - 1]);
    sound.start();

}

这是我的AudioHandler类:

import javazoom.jl.decoder.JavaLayerException;
import javazoom.jl.player.Player;

class AudioHandler extends Thread {

    private Player playMP3;

    public AudioHandler(String mp3) {
        try {
            playMP3 = new Player(getClass().getResourceAsStream(mp3));
        } catch (JavaLayerException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

    public void run() {

        try {
            playMP3.play();
        } catch (JavaLayerException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

列表是:

public static final String[] SOUND_LIST = { "/mayuri.mp3", "/mikoto.mp3",
        "/gai.mp3", "/shougo.mp3", "/gintoki.mp3", "/inori.mp3",
        "/yuzuru.mp3", "/misaki.mp3", "/armin.mp3", "/alphonse.mp3",
        "/alphonse.mp3", "/akane.mp3", "/armin.jpg" };

public static final String[] QUOTE_LIST = { "/mayuri.txt", "/mikoto.txt",
        "/gai.txt", "/shougo.txt", "/gintoki.txt", "/inori.txt",
        "/yuzuru.txt", "/misaki.txt", "/armin.txt", "/alphonse.txt",
        "/alphonse.txt", "/akane.txt", "/armin.txt" };

public static final String[] ICON_LIST = {"/mayuri.jpg", "/mikoto.jpg",
    "/gai.jpg", "/shougo.jpg", "/gintoki.jpg", "/inori.jpg",
    "/yuzuru.jpg", "/misaki.jpg", "/armin.jpg", "/alphonse.jpg",
    "/alphonse.jpg", "/akane.jpg", "/armin.jpg" 
};

谢谢!

2 个答案:

答案 0 :(得分:1)

加载资源时出现NullPointerException通常意味着找不到资源。此行为与正常文件打开不同,不会抛出任何异常。

你的音频文件是否包含在你的jar中?如果没有,请确保在导出Jar时,设置正确的选项以便包含它们。如果您需要可重复性,更好的选择可能是在您的应用程序中引入真正的构建过程。

答案 1 :(得分:1)

我刚刚找到原因!

我的资源文件夹中有一个名为Mikoto.mp3的文件,我在我的代码中将其键入为mikoto.mp3。当我使用eclipse运行它时,可以允许这样做。但是当我运行runnable jar文件时,它会失败,因为它区分大小写。

当我将文件名更改为mikoto.mp3时,它可以正常工作!

感谢您的回答!