1

私がやろうとしているのは、「再生」ボタンで JFrame を作成することです。ボタンをクリックすると、ビデオが再生されます。
ビデオが終了したら閉じて、ボタンをもう一度クリックできるようにする必要があります。

私がアプローチする問題は次のとおり
です。 1.「再生」ボタンをクリックすると、ビデオの新しいフレームが表示されますが、ビューがなく、黒い背景のみがあります。オーディオは正常に再生されます。
2. ビデオが終了すると (音で判断)、フレームが閉じず、「ループ中にパケットを読み取る」の後に何も実行されません。

必要なのは:
1. ビデオを表示する。
2. ビデオを終了させて​​、終了後にプログラムが他の作業を行えるようにします。

この問題について何か助けていただければ幸いです。

以下は私が使用するコードです。

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

import com.xuggle.mediatool.IMediaReader;
import com.xuggle.mediatool.IMediaViewer;
import com.xuggle.mediatool.ToolFactory;


public class FramePlayer extends JFrame {
    private String movieName = "movieName.avi";

    public FramePlayer() {
        //Create Panel
        JPanel panel = new JPanel();
        getContentPane().add(panel);
        panel.setLayout(null);

        JButton startButton = new JButton("Play");
        startButton.setBounds(50, 60, 80, 30);

        startButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent event) {

            //Play movie on button click
            IMediaReader reader = ToolFactory.makeReader(movieName);
            IMediaViewer viewer = ToolFactory.makeViewer();
            reader.addListener(viewer);
            int i = 0;
            while(reader.readPacket() == null)
            {
                //Make sure video is playing
                i++;            
                System.out.println("Frame " + i);
            }
            //This should appear after video ends
            System.out.println("End of video");

           }
        });

        panel.add(startButton);

        setSize(300, 200);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }

    public static void main(String[] args) {

        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                FramePlayer fp = new FramePlayer();
                fp.setVisible(true);
            }
        });
    }
}
4

1 に答える 1

1

これを試して:

new Thread() {
    public void run() {
        //Play movie on button click
        IMediaReader reader = ToolFactory.makeReader(movieName);
        IMediaViewer viewer = ToolFactory.makeViewer();
        reader.addListener(viewer);
        int i = 0;
        while(reader.readPacket() == null)
        {
            //Make sure video is playing
            i++;            
            System.out.println("Frame " + i);
        }
        //This should appear after video ends
        System.out.println("End of video");
    }
}.start();
于 2013-10-27T15:36:08.717 に答える