2012-08-27 17 views
5

का उपयोग करते हुए मुझे पता है कि यह दोहराना प्रश्न है। मूल एक here या here देखें।खेल में एमपी 3 फ़ाइल को नोटपैड

import javafx.scene.media.*; 

class Gui { 
    public static void main(String[] args) { 
    try{ 
     Media hit = new Media("skin.mp3"); 
     MediaPlayer mediaPlayer = new MediaPlayer(hit); 
     mediaPlayer.play(); 
    }catch(Exception e){ 
     e.printStackTrace(); 
    } 
    } 
} 

अपवाद जो मैं हो रही है:

java.lang.IllegalArgumentException: uri.getScheme() == null! 
     at com.sun.media.jfxmedia.locator.Locator.<init>(Locator.java:217) 
     at javafx.scene.media.Media.<init>(Media.java:364) 
     at Gui.main(gui.java:6) 

मैं & चल इसे सही ढंग से jfxrt.jar फ़ाइल सहित द्वारा अर्थात् संकलन कर रहा हूँ

तो मेरी कोड सिर्फ कॉपी पेस्ट है क्लासपाथ

नोट: मैं बस किसी भी आईडीई के बजाय नोटपैड का उपयोग कर रहा हूं। file://e:/skin.mp3 का उपयोग करके यह ठीक काम किया लेकिन एक और अपवाद के साथ मुझे छोड़ दिया:

MediaException: MEDIA_INACCESSIBLE : e 
     at javafx.scene.media.Media.<init>(Unknown Source) 
     at Gui.main(gui.java:6) 

तो अगर आप कर सकते हैं

तो किसी को भी मुझे IllegalArgumentException

के कारण thankx

अद्यतन बता सकते हैं इस अपवाद पर कुछ प्रकाश डालें।

जिस तरह से मैंने गीत की जांच की है, यह भ्रष्ट नहीं है क्योंकि यह vlc में अच्छी तरह से खेल रहा है।

+1

* "दूषित नहीं है क्योंकि यह vlc में अच्छी तरह से खेल रहा है।" * एलओएल! मीडिया प्लेयर असाधारण लंबाई तक जाते हैं ताकि यह सुनिश्चित किया जा सके कि वे लगभग किसी भी बकवास फ़ाइल को फेंक सकें। यदि आपको किसी फ़ाइल की वैधता की पुष्टि करने की आवश्यकता है, तो इसे जांचने के लिए डिज़ाइन किए गए प्रोग्राम का उपयोग करके करें। –

+0

एलओएल! ........... – user1574009

उत्तर

5

JavaFX एपीआई डॉक्स

  • रूप java.net.URI के लिए आवश्यक गया URI RFC-2396 के अनुरूप होना चाहिए से।
  • केवल HTTP, FILE, और JAR URIs समर्थित हैं।

तो, मैं डॉक्स पढ़ने से, आप एक यूआरआइ पथ देने की आवश्यकता पर शक।

कुछ file://path/to/file/skin.mp3 की तरह कुछ काम करेगा।

+2

और उस यूआरएल को पाने के लिए, आप 'नई फाइल ("skin.mp3") कर सकते हैं। ToURI()। ToString() ' – Thilo

+0

अरे धन्यवाद। IllegalArgumentException 'file: // e:/skin.mp3' का उपयोग करके चला गया है, लेकिन अब मुझे एक और समस्या ' मीडिया अपवाद: MEDIA_INACCESSIBLE: e javafx.scene.media.Media पर मारा गया है। (अज्ञात स्रोत) Gui.main पर (gui.java:6) ' – user1574009

+0

जावाएफएक्स दस्तावेज़ कहते हैं," एक त्रुटि उत्पन्न हुई है: हालांकि मीडिया मौजूद हो सकता है, यह सुलभ नहीं है "- यह विशेष रूप से उपयोगी नहीं है। जो मैंने पढ़ा है, उससे आपके पास फ़ाइल तक पहुंच नहीं है या फ़ाइल को अन्य प्रोग्राम द्वारा लॉक किया गया है ... साथ ही कई अन्य संभावित मुद्दों – MadProgrammer

4

इस प्रश्न में कोड के साथ कुछ समस्याएं हैं।

  1. कक्षा को सार्वजनिक होने की आवश्यकता है।
  2. जावाएफएक्स 2 अनुप्रयोगों को एप्लिकेशन क्लास का विस्तार करने की आवश्यकता है।
  3. जावाएफएक्स 2 अनुप्रयोगों को एक प्रारंभ विधि परिभाषित करना चाहिए।
  4. मैडप्रोग्रामर द्वारा नोट किए गए मीडिया के लिए लोकेटर एक पूर्ण यूआरआई होना चाहिए।

हालांकि सवाल एक JavaFX -2 टैग है, मुझे आश्चर्य है कि अगर यह JavaFX 1.x JavaFX स्क्रिप्ट (जो अब एक असमर्थित प्रोग्रामिंग भाषा और JavaFX 2 के साथ असंगत है) के लिए लिखा है। यदि ऐसा है, तो मैं JavaFX स्क्रिप्ट के बजाय जावा में कोडिंग और JavaFX 2.x का उपयोग करने की अनुशंसा करता हूं।

विंडोज़ पर एक यूआरआई के पूर्ण लोकेटर के फ़ाइल प्रस्तुति में फ़ाइल प्रोटोकॉल के बाद तीन स्लेश होते हैं।उदाहरण के लिए, निम्नलिखित मान्य है:

 
file:///C:/Users/Public/Music/skin.mp3 

किसी कारण के लिए, एक स्लेश भी काम करेंगे (मुझे लगता है कि आंतरिक रूप से जावा फ़ाइलों पर या प्रोटोकॉल विनिर्देशक के लिए अतिरिक्त // अंतर्वेशन होगा शायद वहाँ कुछ मैं डॉन है ' यूआरएल विनिर्देश में समझ में नहीं आता है जिसका मतलब है कि आपको प्रोटोकॉल के बाद // // की आवश्यकता नहीं है)। कुछ के लिए फ़ाइल uri जाँच करने के लिए

 
file:/C:/Users/Public/Music/skin.mp3 

एक तरह से करता है, तो फ़ाइल uri मौजूद

 
System.out.println("File " + filename + " exists? " + new File(filename).exists()); 

तुम्हें पता है के बाद अपनी फ़ाइल uri मान्य है पूछने के लिए, आप एक स्ट्रिंग का उपयोग करने के लिए इसे परिवर्तित कर सकते हैं वैध है।

file.toURI().toURL().toExternalForm() 

यहाँ, JavaFX में कुछ ऑडियो त्रुटि हैंडलिंग का एक छोटा सा के साथ एक MediaPlayer का उपयोग कर खेल रहे हैं इतना है कि यह समझने के लिए कुछ गलत हो जाता है, तो आसान है के लिए एक छोटा नमूना कार्यक्रम है।

import java.io.File; 
import java.net.MalformedURLException; 
import javafx.application.Application; 
import javafx.scene.Scene; 
import javafx.scene.control.Label; 
import javafx.scene.layout.StackPane; 
import javafx.scene.media.*; 
import javafx.scene.paint.Color; 
import javafx.stage.Stage; 

/** plays an audio in JavaFX 2.x */ 
public class SimpleAudioPlayer extends Application { 
    public static void main(String[] args) { launch(args); } 
    @Override public void start(Stage stage) throws MalformedURLException { 
    final Label status = new Label("Init"); 
    MediaPlayer mediaPlayer = createMediaPlayer(
     "C:/Users/Public/Music/Sample Music/Future Islands - Before the Bridge.mp3", 
     status 
    ); 
    StackPane layout = new StackPane(); 
    layout.getChildren().addAll(status); 
    stage.setScene(new Scene(layout, 600, 100, Color.CORNSILK)); 
    stage.show(); 
    if (mediaPlayer != null) { 
     mediaPlayer.play(); 
    } 
    } 

    /** 
    * creates a media player using a file from the given filename path 
    * and tracks the status of playing the file via the status label 
    */ 
    private MediaPlayer createMediaPlayer(final String filename, final Label status) throws MalformedURLException { 
    File file = new File(filename); 
    if (!file.exists()) { 
     status.setText("File does not exist: " + filename); 
    } 
    final String mediaLocation = file.toURI().toURL().toExternalForm(); 
    Media media = new Media(mediaLocation); 
    MediaPlayer mediaPlayer = new MediaPlayer(media); 
    mediaPlayer.setOnError(new Runnable() { 
     @Override public void run() { 
     status.setText("Error"); 
     } 
    }); 
    mediaPlayer.setOnPlaying(new Runnable() { 
     @Override public void run() { 
     status.setText("Playing: " + mediaLocation); 
     } 
    }); 
    mediaPlayer.setOnEndOfMedia(new Runnable() { 
     @Override public void run() { 
     status.setText("Done"); 
     } 
    }); 
    return mediaPlayer; 
    } 
} 

यहाँ एक JavaFX 2.x मीडिया प्लेयर जो plays all of the mp3 files in a given directory sequentially के एक अतिरिक्त उदाहरण के लिए एक कड़ी है।

+0

अच्छा, यह काम कर रहा है ... धन्यवाद! –

संबंधित मुद्दे