2012-12-04 160 views
0

我使用Libgdx編寫一個遊戲,它利用的方法,如Gdx.files.internal(「文件」)來加載文件,導出應用程序時,這應該工作,因爲這是它的意思做編譯.Jar崩潰(沒有Java控制檯),但編譯並在Eclipse中運行?

有些文件被複制到USER目錄並從那裏加載(音頻)是什麼讓應用程序崩潰?這裏提到:Java application runs properly in Eclipse, but not as .jar

如果任何人都可以給我一個想法,怎麼回事那簡直太好了,沒有啓動Java控制檯對我也這樣,我不知道

編譯。罐子是在這裏: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(); 
    } 
+1

您可以嘗試從命令提示符/終端運行它,查看是否有任何異常。 'java -jar yourjarname.jar' – DHall

+1

我要指出的第一件事是你的string.replace函數調用沒有做任何事情,因爲它們返回的字符串被忽略。我想你想要'external = external.replace('\\','/');' – gbtimmon

+0

@DHall 首先謝謝你,你的傳奇!這是完美的,至少我現在可以看到數字 @ gbtimmon 謝謝你指出這一點!我已經做出了這些變化 這些錯誤看起來是從找到音頻樣本,它無法找到.wavs – user1877021

回答

0

Right c舔你的桌面項目 - >構建路徑 - >配置,並檢查是否在「資源」是Android資產文件夾,並在「訂購和導出」中選中。 另外,當您導出可運行jar時,請選中「將所需庫包裝到生成的庫中」。