java动画声音无法正常播放

标签 java swing audio javasound

一个球无限循环地上下移动。每个 Action 都应该播放声音。但每5-6个 Action 就会播放一次。为什么会发生这种情况?声音持续时间小于1秒。在代码中,循环的每次迭代都会 hibernate 3 秒。然而,将 sleep 时长改为6秒,就达到了所需的效果。

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import sun.audio.*;
import java.io.*;

public class dabble {

private boolean z=false;
private int x=10;
private int y=10;
private JFrame frame;
private JLabel label;
private mypanel panel;
private JButton b1;
private JButton b2;

public static void main (String[] args) throws Exception
{
    dabble dab = new dabble();
    dab.start();
}

void start()
{
    frame = new JFrame();
    label = new JLabel();
    panel = new mypanel();
    b1= new JButton("Start");
    b2= new JButton("Stop");

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    b1.addActionListener(new al1());
    b2.addActionListener(new al2());

    frame.getContentPane().add(BorderLayout.NORTH,b1);
    frame.getContentPane().add(BorderLayout.SOUTH,b2);
    frame.getContentPane().add(BorderLayout.CENTER,panel);
    frame.getContentPane().add(BorderLayout.EAST,label);
    frame.setSize(600,600);
    frame.setVisible(true);
}

class al1 implements ActionListener{
    public void actionPerformed(ActionEvent event){
        if (z==false)
        {
            class myrun implements Runnable{
                public void run(){
                    z=true;
                    while(z==true)
                    {
                        y=510-y;
                        panel.repaint();
                        try
                        {
                            InputStream in=new FileInputStream("hit.wav");
                            AudioStream as=new AudioStream(in);
                            AudioPlayer.player.start(as);
                            Thread.sleep(3000);
                        }
                        catch(Exception Ex){}
                    }
                }
            }

            Runnable myjob = new myrun();
            Thread mythread = new Thread(myjob);
            mythread.start();

        }
    }
}

class al2 implements ActionListener{
    public void actionPerformed(ActionEvent event){
        z=false;
    }
}

class mypanel extends JPanel {
    public void paintComponent ( Graphics g){
        g.setColor(Color.white);
        g.fillRect(0,0,this.getWidth(),this.getHeight());
        int red = (int) (Math.random()*255);
        int green = (int) (Math.random()*255);
        int blue = (int) (Math.random()*255);
        Color c1 = new Color(red,green,blue);
        g.setColor(c1);
        g.fillOval(x,y,20,20);
    }
}
}

最佳答案

  1. 将声音加载到 ClipJavaSound info.所示页。
  2. Clip 提供 loop(int)方法指定播放次数。

关于java动画声音无法正常播放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9315709/

相关文章:

python-3.x - Python Librosa : What is the default frame size used to compute the MFCC features?

python - 如何在有声读物网站上捕获mp3文件的请求URL?

java - 如何创建自增主键?

java - Java框架的建议

java - 单击监听器在 BufferedImage 和 Icon 上返回错误

java - 将监听器定义的字符串变量导入到另一个包中

audio - 使用Inno Setup获取声卡的供应商ID和设备ID

java - 验证服务器到服务器的通信

Java:Azure服务总线队列通过 session 接收消息

java - 如何使用 JMX 修改具有非原始数据类型的属性?