私がやろうとしているのは、「再生」ボタンで 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);
}
});
}
}