Невозможно увидеть видео при использовании JavaFX JFXPanel в JDialog

1

Я пытаюсь встроить видео в поле JDialog. В конце концов мне нужно встроить три отдельных видео, и поэтому я реализовал функциональность таким образом, чтобы определить свою собственную реализацию JFXPanel для повторного использования. Я могу запустить приложение, и когда я отлаживаю его, выполняется createScene, но я не вижу видимого видео, и я не получаю никаких ошибок. Я также попытался вывести текст, и это тоже не было видно. Я смог получить видео, которое хотел бы включить, чтобы показать его в чистой реализации JavaFX, поэтому я знаю, что это не кодировка или что-то еще. Могу ли я попросить кого-нибудь просмотреть следующий код и дать мне несколько предложений. Я использую Netbeans как IDE, если это важно. Благодарю!

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package swingjavafxtest;

import javafx.embed.swing.JFXPanel;
/**
 *
 * @author acarnes
 */
public class SwingJavaFXTestDialog extends javax.swing.JDialog
{
    private static final String BURST_OPTION_1_VIDEO = "file:///c:/vids/burst_option1.MP4";
    /**
     * Creates new form SwingJavaFXTestDialog
     */
    public SwingJavaFXTestDialog(java.awt.Frame parent, boolean modal)
    {
        super(parent, modal);
        initComponents();
    }

    /**
     * This method is called from within the constructor to initialize the
     * form. WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
        // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
        private void initComponents()
        {

                setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
                setModalityType(java.awt.Dialog.ModalityType.APPLICATION_MODAL);

                javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
                getContentPane().setLayout(layout);
                layout.setHorizontalGroup(
                        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGap(0, 400, Short.MAX_VALUE)
                );
                layout.setVerticalGroup(
                        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGap(0, 300, Short.MAX_VALUE)
                );

                pack();
        }// </editor-fold>                        

    /**
     * @param args the command line arguments
     */
    public static void main(String args[])
    {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
         */
        try
        {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels())
            {
                if ("Nimbus".equals(info.getName()))
                {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex)
        {
            java.util.logging.Logger.getLogger(SwingJavaFXTestDialog.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex)
        {
            java.util.logging.Logger.getLogger(SwingJavaFXTestDialog.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex)
        {
            java.util.logging.Logger.getLogger(SwingJavaFXTestDialog.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex)
        {
            java.util.logging.Logger.getLogger(SwingJavaFXTestDialog.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the dialog */
        java.awt.EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                SwingJavaFXTestDialog dialog = new SwingJavaFXTestDialog(new javax.swing.JFrame(), true);
                JavaFXVideoPanel bo1VideoPanel = new JavaFXVideoPanel(BURST_OPTION_1_VIDEO);
                dialog.add(bo1VideoPanel);  
                dialog.addWindowListener(new java.awt.event.WindowAdapter()
                {
                    @Override
                    public void windowClosing(java.awt.event.WindowEvent e)
                    {
                        System.exit(0);
                    }
                });
                dialog.setVisible(true);
            }
        });
    }
        // Variables declaration - do not modify                     
        // End of variables declaration                   
}

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package swingjavafxtest;
import javafx.application.Platform;
import javafx.embed.swing.JFXPanel;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javafx.scene.media.MediaView;
import javafx.scene.media.Track;
import javafx.stage.Stage;
import javafx.scene.text.Text;
import javafx.scene.text.Font;
import javafx.scene.paint.Color;

/**
 *
 * @author acarnes
 */
public class JavaFXVideoPanel extends JFXPanel
{
    public JavaFXVideoPanel(String url) 
    {
        super();
        final String videoURL = url;
        Platform.setImplicitExit(false);
        Platform.runLater(new Runnable() {
            @Override
            public void run() {
                createScene(videoURL);
            }
        });
    }
    private void createScene(String url)
    {
        /*  Media bo1Media = new Media(url);
            MediaPlayer bo1MediaPlayer = new MediaPlayer(bo1Media);
            bo1MediaPlayer.setAutoPlay(true);
            bo1MediaPlayer.setCycleCount(javafx.scene.media.MediaPlayer.INDEFINITE);
            MediaView bo1MediaView = new MediaView(bo1MediaPlayer);
            Group root = new Group();
            Scene scene = new Scene(root,400,400);
            root.getChildren().add(bo1MediaView);
            */
            Group root = new Group();
            Scene scene = new Scene(root,Color.ALICEBLUE);
            Text text = new Text();
            text.setX(40);
            text.setY(100);
            text.setFont(new Font(25));
            text.setText("Welcome JAVAFX!");
            root.getChildren().add(text);
            this.setScene(scene);
            this.setVisible(true);

    }
}
Теги:
javafx
video
swing

1 ответ

1
Лучший ответ

Пример решения

import javafx.application.Platform;  
import javafx.embed.swing.JFXPanel;  
import javafx.scene.Scene;  
import javafx.scene.layout.StackPane;  
import javafx.scene.media.*;  

import javax.swing.*;  

public class SwingMediaPlayer extends JDialog {  
    private static final String VIDEO =  
            "http://download.oracle.com/otndocs/products/javafx/oow2010-2.flv";  

    public SwingMediaPlayer(java.awt.Frame parent, boolean modal) {  
        super(parent, modal);    
    }  

    public static void main(String args[]) {  
        SwingUtilities.invokeLater(() -> {  
            SwingMediaPlayer dialog = new SwingMediaPlayer(new JFrame(), true);  
            dialog.add(new JavaFXVideoPanel(VIDEO));  
            dialog.addWindowListener(new java.awt.event.WindowAdapter() {  
                @Override public void windowClosing(java.awt.event.WindowEvent e) {  
                    System.exit(0);  
                }  
            });  
            dialog.setSize(400, 300);  
            dialog.setVisible(true);  
        });  
    }  

    static class JavaFXVideoPanel extends JFXPanel {  
        public JavaFXVideoPanel(String url) {  
            super();  
            Platform.runLater(() -> createScene(url));  
        }  

        private void createScene(String url) {  
            Media media = new Media(url);  
            MediaView tv = new MediaView(new MediaPlayer(media));  
            setScene(new Scene(new StackPane(tv)));  

            tv.getMediaPlayer().play();  
        }  
    }  
}  

Пример скриншота

Потому что ни один пример не завершен без большой красной кнопки, которая абсолютно ничего не делает. , ,

Изображение 174551

  • 0
    Кажется, что, хотя в примере это не требовалось, вы указали, что размер JFXPanel был необходим для просмотра видео в моем собственном коде. Я помещаю это здесь в случае, если у кого-то еще есть подобная проблема.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню