.jar spielt keinen Ton...


Zeedan

Grünschnabel
#1
Hallo liebe Community,
da ich nun seit ca 2-3 Std. trotz Videos am versagen bin versuche ich nun hier auf Hilfe zu stoßen.
2 .wav Dateien befinden sich im eingebundenen res-Ordner und funktionier auch soweit wenn ich meine Main Klasse in Eclipse starte.
Sobald ich die Klassen als .jar exportiere, ertönt kein Ton mehr welcher vorher eingebunden wurde...
Daher bitte ich euch darum sich den Code mal anzuschauen und ggf. bei vorhandenem Wissen Möglichkeiten anzubieten damit ich zum Erfolg komme^^

Java:
    private static MusicLoader music;

        //Aufruf
        music = new MusicLoader();
        music.loadstart();
        music.play(MusicLoader.sound);
Java:
//Musikloader Klasse
import java.io.File;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.sound.sampled.FloatControl;

public class MusicLoader {
    
    public static File sound;
    public static float value;
    Clip clip;

    public MusicLoader() {
        value = -20f;
        
    }
    
    public void loadstart() {
         sound = new File("res/start.wav");

    }
    public void loadende() {
        sound = new File("res/end.wav");
    }
    
    public void play(File sound) {
        try {
            value = -20f;
            clip = AudioSystem.getClip();
            clip.open(AudioSystem.getAudioInputStream(sound));
            FloatControl gainControl = (FloatControl) clip.getControl(FloatControl.Type.MASTER_GAIN);
            gainControl.setValue(value);
            clip.start();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
Vielen Dank,
Gruß André
 

ComFreek

Mod | @comfreek
Moderator
#2
Möglicherweise funktionieren die relativen Pfade nicht mehr.

Bekommst du eine Exception auf der Standardausgabe angezeigt? (Dazu musst du die .jar von einem Terminal aus mittels `java -jar deineJar.jar` starten.)
 

Zeedan

Grünschnabel
#4
Und hier nochmal ein Screen von der Ordnerführung:
Screenshot
Habe die .wav´s "einfach" in den Ordner res gezogen.

Frag mich halt nur warum der Start von Eclipse aus die Sounds abspielt .... und meine .jar nicht.
 

ComFreek

Mod | @comfreek
Moderator
#5
Das ist die Meldung wenn ich es so versuche im Terminal:
Screenshot
Das ist eine Fehlermeldung vom "java" Befehl, nicht von deinem Programm. Allgemein solltest du mit Leerzeichen bei Kommandozeilenprogrammen aufpassen. Ohne Double Quotes um das Argumen herum (wie in `java -jar "FH4 Auction Snipe Bot.jar"`) funktioniert es nicht.

Was meinst du mit relativen Pfaden?
Du benutzt relative Pfade in deinem Code:
sound = new File("res/start.wav");
Je nachdem wie dein Code ausgeführt wird (per JAR oder in Eclipse), kann das "Current Working Directory", von dem aus alle relativen Pfade aufgelöst werden, anders sein.

Habe die .wav´s "einfach" in den Ordner res gezogen.
Ah, du meinst "erneut dahin gezogen"? Dann hat Eclipse die wohl derart übernommen, dass sie tatsächlich mit der JAR gebundled werden.
Du kannst auch mal die JAR einfach als ZIP-Datei öffnen, dann siehst du welche Dateien sie beinhaltet.

Ich erinnere mich dunkel daran, dass es eine kanonische Lösung in Java gab, irgendetwas mit openResourceAs (?). Du wirst die ziemlich sicher per Google und "java how to bundle resource files" finden :)
 

ComFreek

Mod | @comfreek
Moderator
#9
Okay also ich brauche Java SE 8, bekomme ich das nur noch mit einem Account?!
Das wäre mir sehr neu? Möglicherweise hat dir Oracle auf ihrer Downloadseite nur vorgeschlagen, dass du einen Account eröffnest :) (Ich würde dir sowieso zu einem Package Manager zum Installieren von Software raten. Für Windows gibt es Chocolatey - The package manager for Windows.)

So oder so würde ich dir dringend raten dein Java zu aktualisieren. OpenJDK 11 sollte "das" (*) aktuelle sein, wenn ich nicht falsch liege.

(*) Als eine mögliche Java Implementierung

edit: "java how to bundle resource files" finde ich nur zu Sprachen?
Eventuell hätte "java how to bundle media" oder "images" oder "videos" das behoben ;)

Bitte in Zukunft Code als solches in Code-Tags ([ code=java] ... [/ code]) und nicht als Bild.

Das funzt jetzt auch soweit, nur wie kann ich jetzt die Lautstärke leiser bekommen weil mein FloatControl gainControl geht jetzt nicht mehr...
Screenshot
Dazu habe ich eine StackOverflow Antwort gefunden, die nach einer Lösung klingt. Ich überlasse dir mal das Suchen nach der Fehlermeldung auf Google :)