2015-04-08 3 views
0

Проблема:Программа не запускается, когда я использую MediaPlayer

все работало хорошо, пока я не решил добавить СМИ с медиаплеера в программу. Причина, по которой я знаю, что медиаплеер является виновником, заключается в том, что я устанавливаю функцию, которая запускает медиаплеер до конца основной функции, и экран будет отображаться на секунду, а затем исчезает, поскольку он не работает вообще, если я устанавливаю функцию где угодно остальное.

Соответствующий код, который вызывает проблему

private void playThemeIntro() 
{ 
    Media gameIntroTheme = new Media("GameIntroTheme.MP3"); 
    mediaPlayer = new MediaPlayer(gameIntroTheme); 
    mediaPlayer.setAutoPlay(true); 
} 

весь код

package whowantstobeamillionairetriviagame; 

import java.io.File; 

import javafx.application.Application; 

import javafx.geometry.Insets; 
import javafx.geometry.Pos; 

import javafx.scene.Scene; 
import javafx.scene.media.Media; 
import javafx.scene.control.Button; 
import javafx.scene.image.Image; 
import javafx.scene.image.ImageView; 
import javafx.scene.layout.Background; 
import javafx.scene.layout.Priority; 
import javafx.scene.layout.StackPane; 
import javafx.scene.layout.VBox; 
import javafx.scene.media.MediaPlayer; 
import javafx.scene.paint.Paint; 
import javafx.scene.shape.Rectangle; 
import javafx.scene.text.Font; 
import javafx.scene.text.FontWeight; 
import javafx.stage.Stage; 

public class WhoWantsToBeAMillionaireTriviaGame extends Application 
{ 
private VBox menuLayout; 
private MediaPlayer mediaPlayer; 

@Override 
public void start(Stage startingStage) throws Exception 
{ 
    StackPane backgroundSettings = new StackPane(); 

    Image backgroundColor = new Image("http://1.bp.blogspot.com/-p0s06MBIx_U/T8zKIBZ24pI/AAAAAAAAA7Y/n8hMZfpRic0/s1600/dark+blue+wallpaper+10.jpg"); 

    ImageView background = new ImageView(); 
    background.setImage(backgroundColor); 

    createMenuLayout(); 

    backgroundSettings.getChildren().addAll(background, menuLayout); 

    playThemeIntro(); // If you comment this out, the program works properly 

    Scene backgroundScene = new Scene(backgroundSettings); 
    startingStage.setScene(backgroundScene); 

    startingStage.setTitle("Who Wants to be a Millionaire"); 
    startingStage.show(); 
} 

private void playThemeIntro() 
{ 
    Media gameIntroTheme = new Media("GameIntroTheme.MP3"); 
    mediaPlayer = new MediaPlayer(gameIntroTheme); 
    mediaPlayer.setAutoPlay(true); 
} 

private VBox createMenuLayout() 
{ 
    menuLayout = new VBox(); 
    menuLayout.setSpacing(20); 
    menuLayout.setAlignment(Pos.TOP_CENTER); 

    Image millionaireLogo = new Image(new File("MillionaireLogo1.PNG").toURI().toString()); 

    ImageView logoPicture = new ImageView(); 
    logoPicture.setImage(millionaireLogo); 
    logoPicture.setPreserveRatio(true); 
    logoPicture.setSmooth(true); 
    logoPicture.setCache(true); 

    menuLayout.getChildren().add(logoPicture); 

    Button menuButtons[] = new Button[] 
    { 
     new Button("Play"), 
     new Button("Options"), 
     new Button("Help"), 
     new Button("Exit") 
    }; 

    for (int i = 0; i < 4; i++) 
    { 
     menuButtons[i].setPrefSize(200, 30); 
     Rectangle r = new Rectangle(200, 30, Paint.valueOf("346699")); 
     r.setArcHeight(30); 
     r.setArcWidth(30); 
     menuButtons[i].setOnMouseEntered(e -> r.setFill(Paint.valueOf("0f69b4"))); 
     menuButtons[i].setOnMouseExited(e -> r.setFill(Paint.valueOf("346699"))); 
     menuButtons[i].setBackground(Background.EMPTY); 
     menuButtons[i].setTextFill(Paint.valueOf("White")); 
     menuButtons[i].setFont(Font.font("Serif", FontWeight.BOLD, 16)); 
     VBox.setMargin(menuButtons[i], new Insets(0, 0, 0, 8)); 
     VBox.setVgrow(menuButtons[i], Priority.ALWAYS); 
     StackPane sp = new StackPane(); 
     sp.getChildren().addAll(r, menuButtons[i]); 
     menuLayout.getChildren().add(sp); 
    } 

    return menuLayout; 
} 

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

Ошибка, что я получил

Exception in Application start method 
java.lang.reflect.InvocationTargetException 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:497) 
at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:389) 
at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:328) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:497) 
at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767) 
Caused by: java.lang.RuntimeException: Exception in Application start method 
at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:917) 
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$152(LauncherImpl.java:182) 
at com.sun.javafx.application.LauncherImpl$$Lambda$50/1642360923.run(Unknown Source) 
at java.lang.Thread.run(Thread.java:745) 
Caused by: java.lang.IllegalArgumentException: uri.getScheme() == null! uri == 'GameIntroTheme.MP3' 
at com.sun.media.jfxmedia.locator.Locator.<init>(Locator.java:211) 
at javafx.scene.media.Media.<init>(Media.java:391) 
at whowantstobeamillionairetriviagame.WhoWantsToBeAMillionaireTriviaGame.playThemeIntro(WhoWantsToBeAMillionaireTriviaGame.java:57) 
at whowantstobeamillionairetriviagame.WhoWantsToBeAMillionaireTriviaGame.start(WhoWantsToBeAMillionaireTriviaGame.java:46) 
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$159(LauncherImpl.java:863) 
at com.sun.javafx.application.LauncherImpl$$Lambda$53/792965399.run(Unknown Source) 
at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$172(PlatformImpl.java:326) 
at com.sun.javafx.application.PlatformImpl$$Lambda$46/355629945.run(Unknown Source) 
at com.sun.javafx.application.PlatformImpl.lambda$null$170(PlatformImpl.java:295) 
at com.sun.javafx.application.PlatformImpl$$Lambda$48/266742917.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at com.sun.javafx.application.PlatformImpl.lambda$runLater$171(PlatformImpl.java:294) 
at com.sun.javafx.application.PlatformImpl$$Lambda$47/1915503092.run(Unknown Source) 
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95) 
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) 
at com.sun.glass.ui.win.WinApplication.lambda$null$145(WinApplication.java:101) 
at com.sun.glass.ui.win.WinApplication$$Lambda$36/1963387170.run(Unknown Source) 
... 1 more 
    Exception running application  whowantstobeamillionairetriviagame.WhoWantsToBeAMillionaireTriviaGame 
Java Result: 1 
+0

Любая ошибка? –

+0

Нет, он только начинается и закрывается, когда я запускаю проект. –

+0

Прочтите [медиа-документацию] (https://docs.oracle.com/javase/8/javafx/api/javafx/scene/media/package-summary.html), чтобы узнать, как получить информацию об ошибке. – jewelsea

ответ

0

Media constructor требует строку, которая представляет URL с file: , http:, или jar:.

Я не знаю макет проекта, поэтому я не могу дать однозначный ответ, но вы, вероятно, нужно что-то вроде

Media gameIntroTheme = 
    new Media(getClass().getResource("GameIntroTheme.MP3").toExternalForm()); 
+0

Насколько бы мне ни было, если моя IDE (NetBeans) сообщит мне, что звуковой файл (GameIntroTheme.MP3) «находится в двоичных данных. Хотелось бы открыть его в редакторе текстовых файлов», когда я нажимаю его в файлах в разделе IDE, а затем далее говорится: «Путь вставки файла для файла здесь не может быть безопасно открыт с кодировкой UTF-8. Хотелось бы открыть его?» «Это означает, что мой файл поврежден в так или иначе? Я должен также упомянуть, что я получил аудиофайл из Интернета с веб-сайта, на котором есть база данных аудиофайлов. –

+0

Как бы вы ожидали, что ваш IDE откроет аудиофайл? Это всего лишь двоичные данные ... Не уверен, что я понимаю этот комментарий. –

+0

Я только что возвращаю назад, что моя IDE говорит мне, когда я впервые нажимаю на аудиофайл (первый раз, когда я когда-либо видел подобное). Вероятно, потому, что он не имеет никакого способа открыть аудиофайл при нажатии в каталоге файлов или не поддерживает открытие аудиофайла. –

0

Вот это сообщение Ответ

Media gameIntroTheme = new Media(newFile("GameIntroTheme.MP3").toURI().toString()); 
+1

Это не сработает, если вы, конечно, соберете свое приложение как файл jar ... –

+0

Хорошо, мне интересно, как мне заставить его работать на это. –

+0

Вы были правы. Я сделал jar cvf WhoWantsToBeAMillionaireTriviaGame.jar * в командной строке и в самом конце поймал filenotfoundexception. Как я могу это решить? –

Смежные вопросы