Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JFrame和MIDI在一起时不工作_Java_Swing_Midi - Fatal编程技术网

Java JFrame和MIDI在一起时不工作

Java JFrame和MIDI在一起时不工作,java,swing,midi,Java,Swing,Midi,所以,基本上,我正在尝试用java制作一个基本的合成器,作为一个有趣的项目。目前它有两个部分,两个部分都可以单独工作,但不能同时工作。第一部分设置合成器并播放音符。第二部分建立了一个JFrame。这是源文件: import javax.sound.midi.*; import javax.swing.*; import java.awt.*; import java.awt.event.*; public class Main { public static void main

所以,基本上,我正在尝试用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); 
        }    
    }  

} 

它将进入“didthesoundstuff”语句,然后程序将停止响应,而不绘制窗口。你知道这是什么原因吗?同样,JFrame相关的东西在没有声音的情况下也能很好地编译。

你的代码对我来说很好,但是你可能会阻止EDT。您应该确保UI也是在EDT的上下文中创建的,有关更多详细信息,请参阅您的代码对我来说运行良好,但您可能会阻止EDT。您应该确保UI也是在EDT上下文中创建的,有关更多详细信息,请参阅