Я пишу часть образовательного программного обеспечения и хочу, чтобы пользователь мог выбрать видео для просмотра из списка, который находится в моем графическом интерфейсе JavaFX.Создание медиафайла в приложении JavaFX
Я создал класс mediaPlayer, который содержит основной метод, который запускает код и отображает видео правильно, однако моя следующая задача - создать экземпляр класса mediaPlayer и передать URL-адрес видео, которое будет отображаться как параметр.
Я попытался закодировать mediaPlayerTest, в результате чего я создания экземпляра MediaPlayer, передать его URL-адрес в качестве параметра, а затем вызвать метод Start(), однако я получаю следующие ошибки при запуске моего класса тестера:
Exception in thread "main" java.lang.ExceptionInInitializerError
at javafx.scene.web.WebView.<init>(WebView.java:271)
at Media.mediaPlayer.start(mediaPlayer.java:34)
at Media.MediaPlayerTest.main(MediaPlayerTest.java:23)
Caused by: java.lang.RuntimeException: Internal graphics not initialized yet
at com.sun.glass.ui.Screen.getScreens(Screen.java:70)
at com.sun.javafx.webkit.prism.PrismGraphicsManager.<init>(PrismGraphicsManager.java:43)
at javafx.scene.web.WebEngine.<clinit>(WebEngine.java:290)
... 3 more
Любая помощь для решения этой проблемы была бы оценена, вы можете найти класс тестера и медиаплеера код класса ниже:
MediaPlayer
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.web.WebView;
import javafx.stage.Stage;
public class mediaPlayer extends Application {
public static void main(String[] args) { launch(args); }
// The url of the video to be played
String url = "https://www.youtube.com/embed/CySfQY_lgr4";
public mediaPlayer(String url) {
this.url = url;
}
@Override public void start(Stage stage) throws Exception {
WebView webview = new WebView();
webview.getEngine().load(url);
webview.setPrefSize(640, 390);
stage.setScene(new Scene(webview));
stage.show();
}
}
MediaPlayerTest
package Media;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author Joe
*/
public class MediaPlayerTest {
public static void main (String[] args) {
try {
mediaPlayer mp = new mediaPlayer("https://www.youtube.com/embed/CySfQY_lgr4");
mp.start(null);
} catch (Exception ex) {
Logger.getLogger(MediaPlayerTest.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
Привет, Джеймс, большое спасибо за ваш ответ, это, безусловно, помогло разобраться в нескольких вещах. Причина, по которой я хотел использовать метод тестера, заключалась в том, что я планировал иметь несколько кнопок в разделе моего графического интерфейса, каждый щелчок запускал отдельное видео. Есть ли способ сделать это? Контроллеры для всех кнопок находятся в одном классе контроллера. – freshwaterjoe
Сделайте класс, инкапсулирующий веб-представление, только обычным классом, I.e. Не является подклассом 'Application'. Затем просто укажите его в обработчиках кнопок. Это очень похоже на вопрос, который я задал в ответ. –