2014-10-27 8 views
1

Im пытается настроить видео для воспроизведения в JFrame с использованием JavaFX.javaFX launch() не работает

Но только я вызвать функцию запуска(), чтобы настроить JavaFX и воспроизведение видео, я получаю следующую ошибку

Исключения в заявке конструктора Exception в потоке java.lang «АВТ-EventQueue-0». RuntimeException: невозможно построить экземпляр приложения: class mvap.MVAP_PlayVideo

Кто-нибудь знает, что я делаю неправильно?

public MVAP_PlayVideo() 
{ 
    MVAP.CheckJFrame(); //ensure MVAP.jFrame still exists, recreate if it doesn't 
    jFrame = MVAP.jFrame; //set my jFrame to the MVAP.jFrame 
    MVAP.ClearFrame(); //clear components in the MVAP.jFrame 

    URL = MVAP.URL; //retrieve media URL from MVAP.URL 
    initComponents(); //Set new jFrame components 

    //get Video Dimensions 
     //Set JFrame dimensions to Video Dimensions 
     //jFrame.SetSize(); 

    launch(); //launch video. Program stops working here. 
} 

@Override public void start(final Stage stage) 
{ 
    final JFXPanel fxPanel = new JFXPanel(); //create new panel. After launch();, it's meant to reach here 
    Media media = new Media(URL); //create new Mesia 
    final MediaPlayer player = new MediaPlayer(media); //create new media player 
    //Set Media Player Position 
    fxPanel.setScene(new Scene(new Group(new MediaView(player)), 300, 200)); //Set Dimensions to media dimensions 
    jFrame.add(fxPanel); //add panel to Frame 
    jFrame.setVisible(true); //set frame to Visible 
    player.play(); //play media 
} 

Это весь класс

package mvap; 


import javafx.application.Application; 
import javafx.embed.swing.JFXPanel; 
import javafx.scene.*; 
import javafx.scene.media.*; 
import javafx.stage.Stage; 
import javax.swing.JFrame; 

public class MVAP_PlayVideo extends Application 
{ 

    public static JFrame jFrame = null; //my jFrame 
    String URL = null; //media URL 

    public MVAP_PlayVideo() 
    { 
     MVAP.CheckJFrame(); //ensure MVAP.jFrame still exists, recreate if it doesn't 
     jFrame = MVAP.jFrame; //set my jFrame to the MVAP.jFrame 
     MVAP.ClearFrame(); //clear components in the MVAP.jFrame 

     URL = MVAP.URL; //retrieve media URL from MVAP.URL 
     initComponents(); //Set new jFrame components 

     //get Video Dimensions 
      //Set JFrame dimensions to Video Dimensions 
      //jFrame.SetSize(); 

     launch(); //launch video. Program stops working here. 
    } 

    @Override public void start(final Stage stage) 
    { 
     final JFXPanel fxPanel = new JFXPanel(); //create new panel. After launch();, it's meant to reach here 
     Media media = new Media(URL); //create new Mesia 
     final MediaPlayer player = new MediaPlayer(media); //create new media player 
     //Set Media Player Position 
     fxPanel.setScene(new Scene(new Group(new MediaView(player)), 300, 200)); //Set Dimensions to media dimensions 
     jFrame.add(fxPanel); //add panel to Frame 
     jFrame.setVisible(true); //set frame to Visible 
     player.play(); //play media 
    } 

    private void initComponents() { 

     jLabel2 = new javax.swing.JLabel(); 
     jLabel1 = new javax.swing.JLabel(); 


     jLabel2.setFont(new java.awt.Font("Tahoma", 0, 24)); // NOI18N 
     jLabel2.setText("Watch Video"); 

     jLabel1.setForeground(new java.awt.Color(0, 0, 255)); 
     jLabel1.setText("Back"); 
     jLabel1.addMouseListener(new java.awt.event.MouseAdapter() { 
      public void mouseClicked(java.awt.event.MouseEvent evt) { 
       jLabel1MouseClicked(evt); 
      } 
     }); 

     javax.swing.GroupLayout layout = new javax.swing.GroupLayout(jFrame.getContentPane()); 
     jFrame.getContentPane().setLayout(layout); 
     layout.setHorizontalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(layout.createSequentialGroup() 
       .addContainerGap() 
       .addComponent(jLabel2) 
       .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 225, Short.MAX_VALUE) 
       .addComponent(jLabel1) 
       .addContainerGap()) 
     ); 
     layout.setVerticalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(layout.createSequentialGroup() 
       .addContainerGap() 
       .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
        .addComponent(jLabel1) 
        .addComponent(jLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, 48, javax.swing.GroupLayout.PREFERRED_SIZE)) 
       .addContainerGap(241, Short.MAX_VALUE)) 
     ); 
     jFrameadd(); 
     jFrame.pack(); 
    }// </editor-fold>       

    private void jFrameadd() 
    { 
     jFrame.add(jLabel2); 
     jFrame.add(jLabel1); 
    } 

    private void jLabel1MouseClicked(java.awt.event.MouseEvent evt) { 
     MVAP.ClearFrame(); 
     new MVAP_MemberOptions(MVAP.MVAPDatabase,MVAP.accessLevel); 
    }          


    // Variables declaration - do not modify      
    private javax.swing.JLabel jLabel1; 
    private javax.swing.JLabel jLabel2; 
    // End of variables declaration     
} 
+0

Является ли этот JavaFX 2.1? Также вы можете опубликовать весь свой класс? – icza

+0

это последняя версия, на которую я верю. Я не слишком уверен, как проверить – illusion466

+0

И откуда/как вы называете этот класс MVAP_PlayVideo? – icza

ответ

2

Метод Application.launch() используется для запуска автономного JavaFX приложения.

Но вы пытаетесь интегрировать содержимое JavaFX в приложение Swing. Пожалуйста, прочитайте это официальный Oracle документации:

Integrating JavaFX into Swing Applications

И еще:

JavaFX-Swing Interoperability

Если вы хотите добавить содержимое JavaFX приложению свинг, вы должны использовать обертку JFXPanel, который вы добавляете к вашему контейнеру Swing, и вы должны инициализировать свою панель JavaFX из потока JavaFX следующим образом:

JFrame frame = new JFrame("Swing and JavaFX"); 
final JFXPanel fxPanel = new JFXPanel(); 
frame.add(fxPanel); 

Platform.runLater(new Runnable() { 
    @Override 
    public void run() { 
     // This method is invoked on the JavaFX thread 
     Scene scene = ...; // Create your scene 
     fxPanel.setScene(scene); 
    } 
}); 
+0

Вау, ты исправил его, спасибо за помощь :) – illusion466

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