所以基本上,我正在尝试在java中创建一个基本的合成器,就像一个有趣的侧面项目 . 它目前有两个部分,两个部分都可以自行工作,但不能一起工作 . 第一部分设置合成器并播放音符 . 第二部分设置JFrame . 这是源文件:
import javax.sound.midi.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Main {
public static void main(String[] args) throws Exception {
try {
Synthesizer synth = MidiSystem.getSynthesizer();
synth.open();
MidiChannel[] channels = synth.getChannels();
channels[0].noteOn(60, 60);
Thread.sleep(200);
channels[0].noteOff(60);
synth.close();
System.out.println("Did the sound stuff.");
JPanel pane = new JPanel();
JFrame frame = new JFrame("Sound1");
JButton button1 = new JButton("Click me!");
System.out.println("Things added.");
pane.add(button1);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(pane);
System.out.println("Pane added.");
frame.setSize(300,200);
frame.setVisible(true);
System.out.println("frame is visible now.");
button1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("Clicked!");
}
});
} catch (MidiUnavailableException e) {
System.out.println(e);
System.exit(1);
}
}
}
它将进入“声音填充声明”声明,然后程序将停止响应,而不绘制窗口 . 知道是什么原因引起的吗?同样,JFrame相关的东西在没有声音的情况下编译得很好 .