У меня есть три подвижных партитуры и соответствующие три музыкальные композиции для одновременного воспроизведения, когда партитура движется. Основные функции перечислены ниже:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Test21 {
public static void main(String[] args) {
JFrame jf = new JFrame("康樂彩歌(v0)");
jf.setBounds(0, 0, 1368, 730);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setLayout(null);
JComboBox cmbox = new JComboBox();
cmbox.setBounds(10, 40, 250, 40);
cmbox.setLocation(370,25);
cmbox.setFont(new Font("新細明體", Font.PLAIN, 30));
cmbox.addItem("紫竹調");
cmbox.addItem("走一同去郊遊");
cmbox.addItem("我家門前有小河");
jf.add(cmbox);
JRadioButton rb2 = new JRadioButton("加人聲", false);
rb2.setFont(new Font("新細明體", Font.PLAIN, 20));
rb2.setBounds(635, 28, 90, 30);
jf.add(rb2);
JButton btPlay = new JButton("PLAY");
btPlay.setFont(new Font(Font.DIALOG_INPUT, Font.BOLD, 25));
btPlay.setBounds(740, 25, 100, 40);
jf.add(btPlay);
jf.setVisible(true);
Panel1 jp1 = new Panel1();
Panel2 jp2 = new Panel2();
Panel3 jp3 = new Panel3();
AudioTest1 runAudio = new AudioTest1(); //AudioTest1.java is listed below this section
btPlay.addActionListener(new ActionListener() {//加上事件接收器-對按鍵"PLAY"
@Override
public void actionPerformed(ActionEvent e) {//接收到事件後進行以下的處理
Thread a = new Thread()
{
public void run()
{
if (cmbox.getSelectedIndex() == 0)
{
jp1.setBounds(0, 70, 1368, 630);
jf.add(jp1);
jp1.move = false;
jp1.display();
runAudio.audioFileName = "audio1.wav"; //This is the first music
file to be played
runAudio.AudioPlay();
}
else if (cmbox.getSelectedIndex() == 1)
{
jp2.setBounds(0, 70, 1368, 630);
jf.add(jp2);
jp2.move = false;
jp2.display();
runAudio.audioFileName = "audio2.wav";//This is the second music
file to be played
runAudio.AudioPlay();
}
else if (cmbox.getSelectedIndex() == 2)
{
jp3.setBounds(0, 70, 1368, 630);
jf.add(jp3);
jp3.move = false;
jp3.display();
runAudio.audioFileName = "audio3.wav";//This is the third music
file to be played
runAudio.AudioPlay();
}
jf.setVisible(true);
}
};
Thread b = new Thread()
{
public void run()
{
if (cmbox.getSelectedIndex() == 0)
{
jp1.move = true;
jp1.display();
}
else if (cmbox.getSelectedIndex() == 1)
{
jp2.move = true;
jp2.display();
}
else if (cmbox.getSelectedIndex() == 2)
{
jp3.move = true;
jp3.display();
}
}
};
a.start();
b.start();
}
});
}
}
AudioTest1. java перечислены ниже:
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
class AudioTest1 {//to play the music
String audioFileName;
public void AudioPlay() {
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
try{
Clip clip = AudioSystem.getClip();
AudioInputStream inputStream = AudioSystem.getAudioInputStream(classLoader.getResourceAsStream(audioFileName));
clip.open(inputStream);
clip.start();
while (!clip.isRunning())
Thread.sleep(0);
while (clip.isRunning())
Thread.sleep(0);
clip.close();
} catch (Exception e)
{
e.printStackTrace();
System.out.println(e);
}
}
}
Я не понимаю, почему структура для запуска каждого из трех файлов musi c выглядит одинаково, но почему результаты разные?