【问题标题】:Compiled .Jar Crashes (no java console) but compiles and runs in Eclipse?编译的 .Jar 崩溃(没有 java 控制台)但在 Eclipse 中编译和运行?
【发布时间】:2012-12-04 20:51:02
【问题描述】:

我正在使用 Libgdx 编写游戏代码,它使用诸如 Gdx.files.internal("file") 之类的方法来加载文件,这在导出应用程序时应该可以工作,因为这是它的本意

一些文件被复制到 USER 目录并从那里加载(音频)这是导致应用程序崩溃的原因吗?如此处所述:Java application runs properly in Eclipse, but not as .jar

如果有人能给我一个想法,那就太好了,它也不会为我启动 java 控制台,所以我不知道

编译后的 .jar 在这里:https://www.dropbox.com/s/rz9v7lkdsj78z20/RUSHmup.jar(里面也有库)

这是我认为导致问题的音频加载代码(但我所看到的只是在 Eclipse 中可以正常工作并且可以正常工作的内容)

if(!Gdx.files.external("test.wav").exists()){
            String f = copySong(FILE);
        }
        if(Gdx.files.external("test.wav").exists()) {
        //  String ss = copySong(FILE);
            String songPath = Gdx.files.getExternalStoragePath() + Gdx.files.external("test.wav").path();
            //System.out.println("B4: " + songPath);
            songPath.replace('\\', '/');
            //System.out.println("AF: " + songPath);
            song = minim.loadFile(songPath,2048);//"C:/users/seantest/test.wav", 2048);

        }

        String external = Gdx.files.getExternalStoragePath();
        external.replace('\\', '/');

        Gdx.files.internal("data/audio/1.wav").copyTo(Gdx.files.external("1.wav"));
        Gdx.files.internal("data/audio/2.wav").copyTo(Gdx.files.external("2.wav"));
        Gdx.files.internal("data/audio/3.wav").copyTo(Gdx.files.external("3.wav"));
        Gdx.files.internal("data/audio/go.wav").copyTo(Gdx.files.external("go.wav"));
        count3 = minim.loadSample(external + "3.wav");
        count2 = minim.loadSample(external + "2.wav");
        count1 = minim.loadSample(external + "1.wav");
        countGo = minim.loadSample(external + "go.wav");

        audioData = new RSAudioData(this);

        if(song!=null){
            System.out.println("Song Info: " );
            System.out.println(song.length() + " " + song.sampleRate() + " " + song.bufferSize());
            beat = new BeatDetect(song.bufferSize(), song.sampleRate());
            beat.setSensitivity(300);  
            bl = new RSMBeatListener(beat, song); 
            fftLog = new FFT(song.bufferSize(), song.sampleRate());
            fftLog.logAverages(22, 3);
            max = new float[fftLog.avgSize()];
              for(int i = 0; i < max.length-1; i++)
                max[i] = 0;
        }
    }

    public String copySong(String file) {
        externalFile = Gdx.files.external("test.wav");
        Gdx.files.internal(file).copyTo(externalFile);
        exFile = Gdx.files.getExternalStoragePath() + "test.wav";
        System.out.println(exFile);
        return exFile;
    }

    public String sketchPath() {
        return Gdx.files.getExternalStoragePath();
    }

【问题讨论】:

  • 您可以尝试从命令提示符/终端运行它,看看是否有任何异常。 java -jar yourjarname.jar
  • 我要指出的第一件事是你的 string.replace 函数调用什么都不做,因为它们返回的字符串被忽略了。我想你想要external = external.replace('\\', '/');
  • @DHall 首先谢谢你,你的传奇!这是完美的,至少我现在可以看到数字@gbtimmon 谢谢你也指出了这一点!我已经进行了这些更改错误似乎来自查找音频样本,它找不到 .wavs

标签: java eclipse audio libgdx compiled


【解决方案1】:

右键单击您的桌面项目->构建路径->配置并检查“源”中是否为 android 资产文件夹,并在“订购和导出”中选中。 此外,当您导出可运行的 jar 时,请选中“将所需的库打包到生成的库中”。

【讨论】:

    猜你喜欢
    • 2021-06-06
    • 1970-01-01
    • 1970-01-01
    • 2016-08-18
    • 1970-01-01
    • 2011-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多