2016-05-31 3 views
2
import java.io.File; 

import javafx.application.Application; 
import javafx.scene.media.Media; 
import javafx.scene.media.MediaPlayer; 
import javafx.stage.Stage; 

public class SoundTest extends Application{ 
public static void main(String[] args) { 
    launch(args); 
} 

    public static void sound() { 
     String path = "test.mp3"; 
     Media media = new Media(new File(path).toURI().toString()); 
     MediaPlayer mediaPlayer = new MediaPlayer(media); 
     mediaPlayer.play(); 
    } 

    @Override 
    public void start(Stage arg0) throws Exception { 
     sound(); 
    } 
} 

Ich habe einige Probleme. Ich googelte und stolperte über einige hilfreiche Stack-Overflow-Posts, die erklärten, wie Sounds über Media und Media Player geladen werden.Java Audio wird nicht geladen. toURI funktioniert nicht?

Was ich tue ist, im Aufruf der Sound-Funktion in der Haupt(), aber mein Programm schlägt fehl, aufgrund einiger Fehler in der zweiten wie meine Sound-Funktion. Das Medienobjekt akzeptiert ein Argument im Konstruktor, das den Pfad zur Audiodatei darstellt. Irgendwie ist es nicht dort, wie ich bekommen.

Exception in thread "Thread-0" java.lang.IllegalStateException: Toolkit not initialized 
    at com.sun.javafx.application.PlatformImpl.runLater(Unknown Source) 
    at com.sun.javafx.application.PlatformImpl.runLater(Unknown Source) 
    at javafx.application.Platform.runLater(Unknown Source) 
    at javafx.scene.media.Media$_MetadataListener.onMetadata(Unknown Source) 
    at com.sun.media.jfxmediaimpl.MetadataParserImpl.done(Unknown Source) 
    at com.sun.media.jfxmediaimpl.platform.java.ID3MetadataParser.parse(Unknown Source) 
    at com.sun.media.jfxmediaimpl.MetadataParserImpl.run(Unknown Source) 
Exception in thread "main" java.lang.IllegalStateException: Toolkit not initialized 
    at com.sun.javafx.application.PlatformImpl.runLater(Unknown Source) 
    at com.sun.javafx.application.PlatformImpl.runLater(Unknown Source) 
    at javafx.application.Platform.runLater(Unknown Source) 
    at javafx.scene.media.MediaPlayer.init(Unknown Source) 
    at javafx.scene.media.MediaPlayer.<init>(Unknown Source) 
    at core.SoundTest.sound(SoundTest.java:43) 
    at core.SoundTest.main(SoundTest.java:13) 

Mein Sound-Datei im Ordner meiner Eclipse-Projekt befindet, in dem die Klasse befindet Es ist ein 3 Minuten lang mp3-Datei in der src und bin Ordner befindet sich aber nicht innerhalb der Pakete. (Ich bin auf Windows).

Wie funktioniert das nicht? Warum bekomme ich diese Fehler?

+1

Nur eine Anmerkung, der Code, den Sie zur Verfügung gestellt haben, stimmt nicht mit dem Stack-Trace überein, den Sie angegeben haben. Der Stapel-Trace sagt, dass er sich in einer Methode namens "alarm()" befindet, aber Sie haben 'sound()' bereitgestellt. – dcsohl

+0

@dcsohl ah ja Entschuldigung. Das ist aber nicht so, krank ändern es wirklich schnell. Ich habe den Methodennamen geändert. Wie auch immer, ich habe es korrigiert. – Asperger

+0

Ok, nächster Kommentar: Haben Sie einen Debugger ausprobiert? Hast du dir angeschaut, was der eigentliche 'String' ist, den du an' new Media() 'übergibst? – dcsohl

Antwort

4

Das Problem hierbei ist, dass MediaPlayer gemeint ist die Verwendung in einer JavaFX Anwendung sein nur, damit Sie Ihre Anwendung als JavaFX Anwendung konvertieren müssen, wenn Sie es verwenden können, wollen.

Um Ihre Klasse in eine JavaFX Anwendung konvertieren Sie brauchen:

  1. Um Ihre Klasse SoundTest erstreckt javafx.application.Application
  2. und ändern Sie Ihre main Methode als nächste

    public static void main(String[] args) { Application.launch(args); }

  3. Sie können zu machen Rufen Sie dann die Methode sound in Ihrer Implementierung von 012 auf
+0

Ich verstehe es nicht. Ich habe die javafx-Bibliothek geladen, indem ich den Pfad erstellt habe, den Pfad konfiguriert habe und jfxrt.jar hinzugefügt habe und die entsprechenden Bibliotheken über den Import – Asperger

+0

geladen habe. Es reicht nicht, dass Ihre Klasse javafx.application.Application erweitert und Ihre Hauptmethode Application.launch aufruft (Argumente); –

+0

Anwendung wird JavaFX für Sie initialisieren –