Musik einfügen funktioniert noch nicht

sildave94

Mitglied
Hallo zusammen

Ich möchte in Java ein kleines Spiel programmieren (nichts aufregendes, mehr zum Spass und als Übung), in dem ich dem Benutzer einen Button zur Verfügung stellen möchte, mit dem er Musik laufen lassen kann. Ich habe das Problem auf Google gesucht und Lösungen gefunden, aber keine funktioniert. Immer wenn ich auf den Play-Button klicke kommt eine lange Fehlermeldung im NetBeans-Output Fenster, beginnend mit "Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException".

Der Code beim ActionPerformed für den Play-Button sieht so aus:
Java:
try{
      sound.mp3Player();
    }
    catch(MalformedURLException ex){
    }

Die Methode mp3Player der Klasse Sound geht so:
Java:
public void mp3Player() throws MalformedURLException {
    File f = new File("projectData/sound/comfortablyNumb.mp3");
    AudioClip comfortablyNumb;
     comfortablyNumb = getAudioClip(f.toURL());
    comfortablyNumb.play();
  }

Der angegebene Dateipfad stimmt, da bin ich mir sicher, und NetBeans zeigt in der Code-Ansicht auch keine Fehler... Hat jemand von euch eine Idee, was ich hier falsch mache? Denn egal wo ich nach einer Anleitung zum Einbinden von Musik gesucht habe, es lief schlussendlich alles auf diese Variante hinaus. Eine Alternative habe ich noch gefunden und ausprobiert. Der Code schien etwas simpler zu sein, das Ergebnis war aber genau das Gleiche...

Ich bedanke mich für eure Hilfe
Liebe Grüsse
Silas
 
Die exakte Codezeile in der die NPE auftritt wäre hilfreich und ggf. mehr Code.
Ansonsten gibt es nur zwei Möglichkeiten: sound könnte null sein oder der AudioClip könnte null sein, weil die URL flasch umgewandelt wird (falscher Absoluter Pfad, Umlaute) oder nicht gefunden wird, weil sie innerhalb des jars liegt und die Methode damit nicht umgehen kann. Letzteres lässt sich umgehen, indem man einfach einen Stream von Class.getResourceAsStream übergibt.
 
Die exakte Codezeile in der die NPE auftritt wäre hilfreich und ggf. mehr Code.

Okay, danke für deine Hilfe. Bin gerade ausser Hause, aber sobald ich wieder zu Hause bin (1-2 Stunden) poste ich mal alles an Code was hilfreich sein könnte.

Falls das nicht weiterhelfen sollte, müsste ich nochmal auf deinen ersten Post zurückkommen, ich verstehe noch nicht ganz alles, da ich noch sehr wenig Programmier-Erfahrung habe 😉.

Gruss
Silas
 
Die exakte Codezeile in der die NPE auftritt wäre hilfreich und ggf. mehr Code.

Die NPE tritt in folgenden Zeilen auf:
Java:
comfortablyNumb = getAudioClip(f.toURL());

Java:
sound.mp3Player();

Das Programm besteht bisher nur aus zwei Klassen. Die Hauptklasse über die das GUI läuft, hat bis auf den Play-Button, den ich ja bereits gepostet habe, nichts mit Sound zu tun. Alles was damit zusammenhängt befindet sich in dieser Klasse:

Java:
package game;

import java.awt.*;
import java.applet.*;
import java.io.File;
import java.net.MalformedURLException;

public class soundPlayer extends Applet {

  public void mp3Player() throws MalformedURLException {
    File f = new File("projectData/sound/comfortablyNumb.mp3");
    AudioClip comfortablyNumb;
     comfortablyNumb = getAudioClip(f.toURL());
    comfortablyNumb.play();
  }
}

Hilft das etwas?
 
System.exit ist jetzt nicht ganz das, was er gemeint hat, sondern eher sowas in Richtung printStackTrace, aber im Grunde ja.

Wenn das Problem wirklich direkt in dieser Zeiler liegt:
Java:
comfortablyNumb = getAudioClip(f.toURL());
hiese dies, das f null sein müsste, da du auf kein anderes Object zugreifst und die toURL() Methode, die übrigens deprecated ist, laut Doc keine NPE wirft. Das macht aber keinen Sinn da du f eine Zeile vorher mit new initialisierst. Versuche mal, was passiert, wenn du versuchst das ganze so zu realisieren:
Java:
public void mp3Player() throws MalformedURLException {
    URL url = getClass().getResource("projectData/sound/comfortablyNumb.mp3");
    AudioClip comfortablyNumb = getAudioClip(url);
    comfortablyNumb.play();
}
 

Zurück
Oben