-2

プログラムに BGM を追加しようとしていますが、オーディオ ファイルへのパスを指定すると、エラー メッセージが表示されます。他にどのように指定できますか (これは別の人に送信されます)。したがって、パスは私のシステム上にあることはできません。JAR にも配置する必要があります。

package main;

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;

javax.sound.sampled.AudioSystem;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;

import sun.audio.AudioPlayer;
import sun.audio.AudioStream;

public class Main extends JFrame {
/**
 * 
 */
private static final long serialVersionUID = 1L;
private JPanel contentPane;

/**
 * Launch the application.
 */
public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                Main frame = new Main();
                frame.setVisible(true);
                PlaySound();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

/**
 * Create the frame.
 */
public static void PlaySound() {
    InputStream in;
    try {
        in = new FileInputStream(new File("/audio/Happy_Happy_Birthday.wav"));
        AudioStream audios = new AudioStream(in);
        AudioPlayer.player.start(audios);
    } catch (Exception e) {
        JOptionPane.showMessageDialog(null, e);

    }

}

public Main() {
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 717, 508);
    contentPane = new JPanel() {
        /**
         * 
         */
        private static final long serialVersionUID = 1L;

        public void paintComponent(Graphics g) {
            Image img = Toolkit.getDefaultToolkit().getImage(
                    Main.class.getResource("/images/happy_birthday.jpg"));
            g.drawImage(img, 0, 0, this.getWidth(), this.getHeight(), this);
        }
    };
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    contentPane.setLayout(new BorderLayout(0, 0));
    setContentPane(contentPane);
}
}
4

2 に答える 2

2
  • URLではなくを使用してクリップをロードしますFileになる可能性があります。その場合、リソースはURLではなくによってアクセスされる必要がありますFile。を形成する方法については、タグの情報ページを参照してくださいURL
  • (パッケージjavax.sound.sampled.Clip内の文書化されていないクラスとは対照的に) を使用してサウンドを再生します。Java サウンド情報sun.audioを参照してください。作業ソースのページ。
于 2013-08-31T22:25:47.930 に答える
-1
InputStream in;
    try {
        in = new FileInputStream(new File("Jock_Jams_-_Are_You_Ready_For_This.wav"));
        AudioStream audios = new AudioStream(in);
        AudioPlayer.player.start(audios);
    } catch (Exception e) {
        JOptionPane.showMessageDialog(null, e);

    }

私はwhileループの外でこれを使用していますが、停止できないことを気にしない限り機能します。

于 2016-09-09T12:46:43.253 に答える