我打开GUI时如何播放音乐

时间:2012-04-23 22:11:43

标签: java swing audio javasound

因此,当我打开它时,我希望得到一个开始播放音乐的游戏。我之前从未做过这样的事情,所以我想知道一些建议。考虑到我是一个菜鸟,我无法在网上找到任何可理解的东西,所以如果你能做到这一点并且解释得非常好,这将是惊人的。谢谢!哦,我可以在程序上发布您需要的任何信息。

主要类看起来像:

package com.game.main.window;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import java.awt.event.ActionListener;

public abstract class Main extends JFrame implements ActionListener {

public static JFrame frame = new JFrame();

public static void main(String[] args) {
    createWindow();
}

public static void createWindow() {
    ImagePanel panel = new ImagePanel(
            new ImageIcon(
                    "C:\\Users\\Austin\\Pictures\\My Pictures\\Le Parkour\\ABC0001.jpg")
                    .getImage());

    frame.getContentPane().add(panel);
    frame.setJMenuBar(MenuBar.menuBarCreator());
    frame.pack();
    frame.setTitle("*Game Title* Beta 0.0.1 ADMINISTRATOR VERSION");
    frame.setSize(ImagePanel.img.getWidth(null),
            ImagePanel.img.getHeight(null));
    frame.setLocation(100, 100);
    frame.setVisible(true);
    frame.setResizable(false);
    frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
}
}

5 个答案:

答案 0 :(得分:3)

尝试调查java concurrency,特别是concurrency in Swing。您可以在后台线程中运行音乐,但不要忘记在退出应用程序时停止它!

答案 1 :(得分:2)

请参阅JavaSound信息中的Playing a Clip代码。页。

使用以下内容获取游戏Jar中嵌入声音的URL:

URL urlToExplosion = this.getClass().getResource("/path/to/boom.wav ");

编辑1

frame.setSize(ImagePanel.img.getWidth(null),
        ImagePanel.img.getHeight(null));

坏,坏,坏。不考虑框架装饰。 ImagePanel应将preferredSize()设置为等于图片的大小。由于它可能是ImageObserver,因此在获取图像宽度x高度时,可以使用this代替null。之后,只需将图像面板添加到框架并调用即可。

// set the frame to the smallest size needed to display the content
frame.pack();

答案 2 :(得分:0)

您应该查看Java Media Framework以播放音乐和此类媒体,不太确定MP3的功能,因为我没有尝试过,我相信有更多的开源替代方案,但这应该诀窍。

您可以下载here并查看文档here。 这是一个list of the formats,它目前支持以防链接最终浪费你的时间

答案 3 :(得分:0)

最简单的解决方案可能如下所示:

public void playSound(final String file) {
    new Thread(new Runnable() {

        @Override
        public void run() {
            Applet.newAudioClip(getClass().getResource(file)).play();
        }
    }).start();
}

将wav文件放在您的类旁边或另一个包中并更改getResource方法,然后调用:

playSound("filename.wav");

答案 4 :(得分:0)

看看this 只需确保在单独的线程上运行此操作并在退出时停止播放歌曲,如上所述 另外,只是一个提示:

ImagePanel panel = new ImagePanel(
        new ImageIcon(
                "C:\\Users\\Austin\\Pictures\\My Pictures\\Le Parkour\\ABC0001.jpg")
                .getImage());

你不应该这样做。如果您正在分发应用程序,则将找不到路径,并且不会显示图像图标。您应该创建一个包含资源的文件夹,然后像这样使用该路径:

ImagePanel panel = new ImagePanel(
    new ImageIcon("./resources/ABC0001.jpg").getImage());

这样应用程序就会知道在哪里查找图像。