2014-06-22 4 views
5

오늘 일식에서 어떤 형태의 오디오를 얻는 방법을 찾는 데 시간을 썼으며 모든 단계에서 문제가있었습니다. 현재 작동해야하지만 오류가 발생합니다.javafx를 사용하여 mp3 파일 재생하기

"main"스레드의 예외 java.lang.IllegalArgumentException : 예상 파일 이름이 com.sun.javafx.css.parser.Css2Bin.main Css2Bin.java:44)

기본적으로 작업 한 사람이이 파일을 복사했습니다. FX lib가 어디에 있어야하는지 추가하고 싶습니다. 나는 이것이 공상이 아니라는 것을 알고 있지만, 나는 단지 기초를 시험하고 있었다./B/SRC :

package b; 
import java.io.File; 
import javafx.scene.media.Media; 
import javafx.scene.media.MediaPlayer; 
public class test { 

    public static void main(String[] args){ 
    String uriString = new File("C:\\Users\\Mike\\workspace\\b\\src\\hero.mp3").toURI().toString() 
    MediaPlayer player = new MediaPlayer(new Media(uriString)); 
    player.play(); 
}} 

은 또한, 나는 또한 단지 복사 내가 등록 전으로 이동하여 이클립스에있어 경로 이름을 붙여 시도가 행운 잘못했다 경우 여러 경로 이름을 시도 /hero.mp3. 이 악몽에서 나를 빼내 주면 도움이 될 것입니다.

+0

변경 시도 '새로운 미디어 새로운 미디어'에 (uriString) '("C : \\ 사용자 \\ 마이크 \\ 작업 공간 \\ 나 \\ SRC \\ hero.mp3");' –

+0

같은 오류 , 또한 첫 번째 줄은 사용하지 않게됩니다. – Kasarrah

+0

Test.class.getResource ("hero.mp3"). toString();을 사용하십시오. 또한, Eclipse가 src 디렉토리에 저장 될 리소스를 좋아한다면, 리소스 디렉토리에 저장해야합니다. 이해합니다. – MadProgrammer

답변

1

임베디드 리소스를 참조하는 데 문제가 있다고 생각됩니다. 임베디드 리소스는 애플리케이션 컨텍스트 내에 포함 된 모든 파일 (즉,이 경우 애플리케이션 Jar 내에 저장 됨)입니다.

이러한 리소스에 대한 참조를 얻기 위해, 당신은 당신이 다음 예를 들어, 사용자의 요구 사항에 따라 리소스를로드하는 데 사용할 수있는 URL를 반환 Class#getResource, ...

public class Main extends Application { 

    @Override 
    public void start(Stage primaryStage) { 
     String path = Test.class.getResource("/Kalimba.mp3").toString(); 
     Media media = new Media(path); 
     MediaPlayer mp = new MediaPlayer(media); 
     mp.play(); 

     System.out.println("Playing..."); 
    } 

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

} 
를 사용할 필요가

Application 컨텍스트를 감쌀 때까지는 작동하지 않습니다 ...

+0

같은 오류 : 스레드 "main"의 예외 java.lang.IllegalArgumentException : 예상 파일 이름이 com.sun.javafx.css.parser.Css2Bin.main (Css2Bin.java:44)의 인수로 나타남 경로 오류일까요? 아니면 모든 것을 제거하고 깨끗하게해야합니까? – Kasarrah

+0

'/ Kalimba.mp3' 대신'/ hero.mp3'을 사용 했습니까? – MadProgrammer

+0

옙과 위의 설명에 새 파일 ("C : \\ Users \\ Mike \\ Music \\ hero.mp3"). toURI(). toURL().toString()은 나를 throw하거나 try/catch하게한다. – Kasarrah

2

작업 영역 외부에있는 파일은 file:// 접두어로 포함되어야합니다. 파일이 작동하며 응용 프로그램이 이식 될 resources/music에 경우 기능을 보여주는 간단한 예는 .mp3 inside the .jar

public class Reproductor extends Application { 

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

    @Override 
    public void start(Stage stage) throws Exception { 
     Media media = new Media("file:///Movies/test.mp3"); //replace /Movies/test.mp3 with your file 
     MediaPlayer player = new MediaPlayer(media); 
     player.play(); 
    } 
} 
0

입니다 :

Media media = null; 
try { 
    media = new Media(getClass().getResource("/music/hero.mp3").toURI().toString()); 
} catch (URISyntaxException e) { 
    e.printStackTrace(); 
} 

enter image description here

0

자바 FX EMBED은 MP3로 NetBeans와 병 (jar 파일)

NetBeans에서 가장 먼저 JavaFX 패키지를 프로그래밍했습니다. 그런 다음 항아리 안에 mp3 음악 파일 인 사운드를 추가하여 항아리에 넣고 항아리를 친구들에게 이메일로 보내고 음악이 컴퓨터에서 재생되도록했습니다. 도와 주셔서 감사합니다 StackOverflow. 특히 "JAR 파일에 음악 파일을 넣으십시오."라고 말한 회원에게 감사드립니다. getResourceAsStream()은 사용하려는 API입니다. 그는 getResource()를 사용하여 끝내었지만 올바르게 추적했습니다. 그것은 작동합니다.

1 단계 : 우선 NetBeans에서 실행될 때 음악을 재생할 수 있습니다.

2 단계 : 음악을 반복하고 싶습니다 (반복). 결국 StackOverflow 멤버에게 감사드립니다. 내 소스 코드를 참조하십시오.

3 단계 : 마지막으로 MP3에 jpg 파일을 넣습니다. 자, 이것이 중요합니다. 처음에는 음악이 컴퓨터에서 재생되었지만 항아리는 하드 디스크에서 음악을 읽었습니다. 내가 mp3의 이름을 바꿨을 때, 병이 추락했다. 실행되지 않을 것이고 mp3를 찾을 수 없었다. 나는 mp3를 항아리에 넣어야했고, 항아리 안에 넣어 두어야했습니다. 그렇지 않으면 다른 사람의 컴퓨터에서 재생되지 않았습니다.그것은 getResource()가 트릭을 한 곳입니다.

4 단계 : 그럼 내 항아리를 친구들에게 이메일로 보냈습니다. 일부 서비스 제공 업체는 항아리를 신뢰하지 않고 배달되지 않은 이메일을 다시 내게 보냈습니다. 다른 서비스 제공 업체는 문제가 없으며 전자 메일을 배달합니다. 그래서, 나는 무엇을 했는가? * .jar의 이름을 * .mp4로 변경하고 이메일이 전달되면 친구에게 * .mp4에서 * .jar로 변경하도록 요청했습니다. 그것은 효과가 있었다.

다음은 내 소스 코드입니다. 완벽하지는 않겠지 만 StackOverflow 덕분에 작동합니다.

/* Of course, one needs to import the following gizmo’s (and others): */ 
    import javafx.util.Duration; 
    import javafx.scene.media.Media; 
    import javafx.scene.media.MediaPlayer; 

    /* I want to EMBED the music inside the jar (in the jar). 
    The secret seems to be getResource. The source code starts here, 
    to EMBED the sound (DollyParton.mp3) into the jar: */ 

//************************ begin the music *********************** 

    @Override public void start(Stage primaryStage) throws Exception { 
     init(primaryStage); 
     primaryStage.show(); 
     play(); 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
     MediaPlayer musicplayer; { 

    /* Put your music file IN THE JAR, "getResourceAsStream()" is 
    the API you want to use. Put the DollyParton.mp3 into the Windows 
    folder src/rockymountain. NetBeans automatically copies the mp3 
    to the folder build/classes/rockymountain. */ 

     Media mp3MusicFile = new Media(getClass().getResource("DollyParton.mp3").toExternalForm()); 

     musicplayer = new MediaPlayer(mp3MusicFile); 
     musicplayer.setAutoPlay(true); 
     musicplayer.setVolume(0.9); // from 0 to 1  

     //***************** loop (repeat) the music ****************** 
     musicplayer.setOnEndOfMedia(new Runnable() {  
     public void run() { 
     musicplayer.seek(Duration.ZERO); 
     } 
     }); 
     //*************** end of loop (repeat) the music ************** 

    } 

//**************************** end of music ************************* 

mp3를 Windows 폴더 src/rockymountain에 넣습니다. 그런 다음 NetBeans가 자동으로 mp3를 build/classes/rockymountain 폴더에 복사했습니다. NetBeans는 누군가가 말했기 때문에 mp3를 불필요하게 만든 파일 인 폴더/자원에 복사하지 않습니다./resources 폴더는 필요 없으며 비어 있습니다. 다음과 같이

넷빈즈를 사용하여 Java 아카이브 (JAR) 파일을 만듭니다

  1. 프로젝트 이름

  2. 선택 속성을 마우스 오른쪽 버튼으로 클릭

  3. 클릭 포장

  4. 컴파일 후 빌드 JAR 확인

  5. 확인 압축 JAR가
  6. 는 프로젝트 이름

  7. 청소를 선택 마우스 오른쪽 버튼으로 클릭하고

    JAR 파일이 내장되어 빌드 변경

  8. 을 적용하기 위해 확인

  9. 클릭 파일 63,210

  10. . 넷빈즈 내부를 보려면 :

  11. 이 프로젝트 이름 >> DIST (유통)를 확장 파일 탭을 클릭합니다. jar 파일은 dist 폴더 안에 있습니다.

관련 문제