import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;
import javax.swing.filechooser.FileNameExtensionFilter;
import javazoom.jl.player.Player; // JLayer
/** 超シンプル MP3 プレイヤー */
public class MusicPlayer extends JFrame {
private static final long serialVersionUID = 1L;
private JButton playBtn = new JButton("▶ 再生");
private JButton stopBtn = new JButton("■ 停止");
private JLabel status = new JLabel("ファイルを開いてください");
private File currentFile;
private Player player; // 再生用スレッド
private Thread playThread;
public MusicPlayer() {
super("Java Swing Music Player");
// 画面レイアウト
JPanel ctrl = new JPanel();
ctrl.add(playBtn);
ctrl.add(stopBtn);
add(ctrl, BorderLayout.CENTER);
add(status, BorderLayout.SOUTH);
// メニュー
JMenuBar bar = new JMenuBar();
JMenu f = new JMenu("ファイル");
JMenuItem open = new JMenuItem("開く...");
open.addActionListener(e -> chooseFile());
f.add(open);
bar.add(f);
setJMenuBar(bar);
// ボタン挙動
playBtn.addActionListener(e -> play());
stopBtn.addActionListener(e -> stop());
// ウィンドウ設定
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setSize(320, 120);
setResizable(false);
setLocationRelativeTo(null);
}
/** ファイル選択ダイアログ */
private void chooseFile() {
JFileChooser fc = new JFileChooser();
fc.setFileFilter(new FileNameExtensionFilter("MP3 Audio", "mp3"));
if (fc.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
currentFile = fc.getSelectedFile();
status.setText("選択中: " + currentFile.getName());
}
}
/** 再生開始 */
private void play() {
if (currentFile == null) {
JOptionPane.showMessageDialog(this, "まず MP3 を選択してください");
return;
}
stop(); // 既に再生中なら停止
playThread = new Thread(() -> {
try (BufferedInputStream in = new BufferedInputStream(new FileInputStream(currentFile))) {
player = new Player(in);
status.setText("再生中: " + currentFile.getName());
player.play(); // ブロッキング
SwingUtilities.invokeLater(() -> status.setText("停止"));
} catch (Exception ex) {
ex.printStackTrace();
SwingUtilities.invokeLater(() -> status.setText("再生失敗"));
}
});
playThread.start();
}
/** 再生停止 */
private void stop() {
if (player != null) {
player.close();
}
if (playThread != null) {
playThread.interrupt();
}
status.setText("停止");
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> new MusicPlayer().setVisible(true));
}
}
C:\java> dir jlayer-1.0.1.jar
2025/05/06 92,109 jlayer-1.0.1.jar ← この行が出れば OK
コンパイル
C:\java> javac -encoding UTF-8 -cp “.;jlayer-1.0.1.jar” MusicPlayer.java
