Jar File выдает FileNotFoundException, но eclipse - нетJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Jar File выдает FileNotFoundException, но eclipse - нет

Сообщение Anonymous »

Я использую eclipse для программирования на Java. В последний день я создал программу на Java и поместил папку /res в корневой каталог проекта. Когда я тестировал программу на eclipse, она работала отлично, но когда я создал исполняемый файл .jar и попытался запустить, получил исключение:
java.io.FileNotFoundException: res/music.wav (No such file or directory)
at java.base/java.io.FileInputStream.open0(Native Method)
at java.base/java.io.FileInputStream.open(FileInputStream.java:213)
at java.base/java.io.FileInputStream.(FileInputStream.java:152)
at java.desktop/com.sun.media.sound.SunFileReader.getAudioInputStream(SunFileReader.java:117)
at java.desktop/javax.sound.sampled.AudioSystem.getAudioInputStream(AudioSystem.java:1060)
at main.MusicPlayer.run(MusicPlayer.java:21)
at java.base/java.lang.Thread.run(Thread.java:1583)

Он выдает исключение FileNotFoundException, но только когда я запускаю его как файл .jar.
Я видел, что файл jar включает только папку src/, поэтому его нет работает.
Я говорю кому-то, и он сказал мне, что папка res/ должна находиться внутри корневого каталога.
Может кто-нибудь сказать мне, как мне создать файл .jar?
Где мне это сделать? поместить папку res/?
А еще я использую этот код:
package main;

import java.io.File;

import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.SourceDataLine;

public class MusicPlayer implements Runnable {

private float volume = 0.3f;

@Override
public void run() {
try {
// InputStream is = getClass().getResourceAsStream("/res/music.wav");
// BufferedInputStream bis = new BufferedInputStream(is);
File bis = new File("res/music.wav");
AudioInputStream ais = AudioSystem.getAudioInputStream(bis);
AudioFormat format = ais.getFormat();
DataLine.Info info = new DataLine.Info(SourceDataLine.class, format);
SourceDataLine line = (SourceDataLine) AudioSystem.getLine(info);

line.open(format);
line.start();

int nBytesRead = 0;
byte[] abData = new byte[128000];
while (nBytesRead != -1) {
nBytesRead = ais.read(abData, 0, abData.length);
if (nBytesRead >= 0) {
for (int i = 0; i < nBytesRead; i++) {
// Scale the sample by the volume factor
abData = (byte) (abData * volume);
}
line.write(abData, 0, nBytesRead);
}
}

line.drain();
line.close();
ais.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}


А это файл Main.java:
package main;

public class Main {
public Main () {
Thread musicThread = new Thread(new MusicPlayer());
musicThread.start();
}
public static void main (String[] args) {
new Main();
}
}


Подробнее здесь: https://stackoverflow.com/questions/793 ... e-does-not
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»