Nach Packen in Jar ist Sound nur noch abgehackt zu hören

Status
Nicht offen für weitere Antworten.

eyeBob

Neues Mitglied
Hallo Leute,

ich habe einen Kurzzeitwecker Geschrieben welcher nach Ablauf der vorher eingestellten Zeit eine Wav Datei abspielt.
Solange ich das ganze aus NetBeans starte funktioniert alles einwandfrei.

Die Probleme kommen wenn ich nur das Jar Archive starte. Der Sound erklingt auch. Aber nicht mehr vollständig sondern mit abgehacktem Ende.
Das JAR ist nicht komprimiert. Wenn ich über einen Filechooser in der Anwendung einen alternativ sound auswähle, dann klappt das auch und der Sound wird vollständig gespielt.

Der fragliche Sound um den es geht wird als InputStream über GetResourceAsStream() eingelesen.
Code:
audioInStream = AudioSystem.getAudioInputStream(inStream);

Weil das einlesen von der Platte über File chooser und als Typ File einwandfrei funktionierte habe ich mal folgendes probiert:
Code:
File dingFile = new File(this.inClass.getClass().getResource("/my/NoodleTimer/Sounds/doorbell.wav").toURI());
audioInStream = AudioSystem.getAudioInputStream(dingFile);

Auch hier läuft es aus NetBeans heraus einwandfrei, und aus dem Jar gestartet, kommt diesmal gar kein Sound.

Vielleicht hatte ja schon einmal jemand ein ähnliches Problem.
Falls noch weitere Infos benötigt werden bitte melden.

eyeBob
 
Hmm eventuell dauert das Lesen aus der jar zu lange?
Probier doch mal den Inhalt der wav Datei vorher einzulesen.
z.B.:
Code:
InputStream in = this.getClass().getResourceAsStream("peep.wav");
ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
byte[] buffer = new byte[ 0xFFFF ]; 
for ( int len; (len = in.read(buffer)) != -1; ) 
    byteOut.write( buffer, 0, len );
in.close();
ByteArrayInputStream byteIn = new ByteArrayInputStream(byteOut.toByteArray());
Und mit dem ByteArrayInputStream arbeitest Du dann weiter.
 
Genau das war die Lösung. Dankeschön!!
Ich habe mir sowas in der Richtung schon gedacht, weil ich allerdings erst im Februar rein autodidaktisch von C# auf Java gekommen bin hatte ich keine Ahnung wie ich es anstelle.
Mein bisheriger ansatz war an diversen Stellen im Code ein Thread.sleep einzufügen, hatte allerdings nicht gebracht.

OT: gehört es jetzt eigentlich zum Guten Ton der OSS, dass ich die Hilfestellung aus dem Forum in Danksagungen in der produktInfo Box der Software erwähne?
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben