小さな2Dゲームを作成することで、Javaの理解を深めようとしています。私は学習に最善の方法が苦労しているように感じるので、私が持っている問題については助けを得ないようにしています。私はただ自分でそれを解決します。しかし、私は私のゲームの輸出版で私のバックグラウンドミュージックを再生できないものはほとんどすべて試しました。すべての画像が機能し、 "getClass()"メソッドを使って引っ張られたものはすべて取り込まれますが、音楽はそうではありません。.JARへのエクスポート時にリソースが取得されない
申し訳ありませんが、私はBackgroundMusicManagerクラスのコードをすべて入れなければなりませんが、ヘルプなしで処理したいので、私のプログラムの最初のバージョンは通常とても面倒で、多くの最適化が必要です。要するに、物事がどのように機能するかを実際に確認するために、物事が呼び出され、初期化されているかどうかを知る必要があります。
package com.cs.dd.audioManager;
import java.io.*;
import java.net.URL;
import java.net.URLDecoder;
import javax.sound.sampled.*;
import com.nickgirga.dd.main.*;
import sun.applet.Main;
public class BackgroundMusicManager implements Runnable {
//URLs
public URL mmBgMusicURL = getClass().getResource("/audio/backgroundMusic/casual.wav");
//Files
public File[] bgMusics = { new File(mmBgMusicURL.getFile()) };
public File bgMusic = bgMusics[0];
private static Clip clip;
public static int newGameState;
public static boolean enabled = true;
public static boolean asPlaying = false;
public static Thread bgMusicPlayer = new Thread(new BackgroundMusicManager());
public void play() {
if (enabled) {
try {
if (bgMusic != null) clip = AudioSystem.getClip();
if (bgMusic != null) clip.open(AudioSystem.getAudioInputStream(bgMusic));
if (bgMusic != null) clip.start();
//System.out.println(bgMusics[0].getAbsolutePath());
loopChecker();
bgMusicPlayer.wait();
} catch (LineUnavailableException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (UnsupportedAudioFileException e) {
e.printStackTrace();
} catch (Exception e) {
//e.printStackTrace();
}
}
}
public void loopChecker() {
while (true) {
if (clip.getMicrosecondPosition() >= clip.getMicrosecondLength()) {
bgMusicPlayer.notify();
}
if (!(GameState.state == newGameState)) {
setClip();
}
}
}
public void setClip() {
//System.out.println("setClip");
newGameState = GameState.state;
if (GameState.state == 0) {
clip.stop();
bgMusic = bgMusics[0];
bgMusicPlayer.notify();
} else {
if (GameState.state == 1) {
clip.stop();
bgMusic = bgMusics[0];
bgMusicPlayer.notify();
} else {
clip.stop();
bgMusic = null;
bgMusicPlayer.notify();
}
}
}
@Override
public void run() {
while (true) {
play();
}
}
}
それにパックライブラリでJARとしてこれをエクスポートした後、コンソールが読み取ります
java.io.FileNotFoundException: audio\backgroundMusic\casual.wav (The system cannot find the path specified)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(Unknown Source)
at java.io.FileInputStream.<init>(Unknown Source)
at com.sun.media.sound.WaveFloatFileReader.getAudioInputStream(Unknown Source)
at javax.sound.sampled.AudioSystem.getAudioInputStream(Unknown Source)
at com.cs.dd.audioManager.BackgroundMusicManager.play(BackgroundMusicManager.java:33)
at com.cs.dd.audioManager.BackgroundMusicManager.run(BackgroundMusicManager.java:89)
at java.lang.Thread.run(Unknown Source)
を私はJARを抽出し、正確な場所にFileNotFoundExceptionポイントファイルを見つけたので、私は左です非常に混乱。オーディオはEclipseで動作している間に動作します。イメージは引き続きエクスポートに表示されます。なぜ画像ではなく、オーディオでは動作しますか?
ご協力いただきありがとうございます。ありがとうございました!!!
私はそれを試みましたが、それはまだエディタで再生されますが、エクスポートすると出力されません。 – nickgg