Hallo zusammen
Ich habe ein seltsames Problem. In einer Klasse wird ein Fenster mit diversem Inhalt aufgebaut und ein Midi-Ton produziert. Nun soweit so gut, alles funktioniert prima. Rufe ich nun diese Klasse durch Drücken eines Buttons von einer anderen Klasse aus auf, wird zuerst das leere JFrame dargestellt, danach der Ton abgespielt und erst am Schluss die restlichen GUI-Elemente aufgebaut.
Ich beschäftige mich noch nicht so lange mit Java. Hat jemand eine Idee, an was das liegen kann?
Vielen Dank
markus
Ich habe ein seltsames Problem. In einer Klasse wird ein Fenster mit diversem Inhalt aufgebaut und ein Midi-Ton produziert. Nun soweit so gut, alles funktioniert prima. Rufe ich nun diese Klasse durch Drücken eines Buttons von einer anderen Klasse aus auf, wird zuerst das leere JFrame dargestellt, danach der Ton abgespielt und erst am Schluss die restlichen GUI-Elemente aufgebaut.
Code:
import javax.sound.midi.InvalidMidiDataException;
import javax.sound.midi.MidiSystem;
import javax.sound.midi.MidiUnavailableException;
import javax.sound.midi.Receiver;
import javax.sound.midi.ShortMessage;
import javax.sound.midi.Synthesizer;
import javax.swing.*;
class testen extends JPanel {
public testen(){//Konstruktor mit GUI Elementen
JLabel blabla = new JLabel("Guten Morgen!!");
add(blabla);
}
public static void GUI (){
JFrame fenster=new JFrame ();
fenster.setSize (400,240);
fenster.setTitle ("testen");
fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JComponent newContentPane = new testen();
newContentPane.setOpaque(true);
fenster.setContentPane(newContentPane);
fenster.setVisible(true);
}
public static void ton() throws MidiUnavailableException, InvalidMidiDataException, InterruptedException {
Synthesizer synth = MidiSystem.getSynthesizer();
synth.open();
Receiver rcvr = synth.getReceiver();
ShortMessage msg = new ShortMessage();
msg.setMessage(ShortMessage.NOTE_ON, 0, 68, 90);
rcvr.send(msg, -1);
Thread.sleep(2000);
msg.setMessage(ShortMessage.NOTE_OFF, 0, 0, 0);
rcvr.send(msg, -1);
synth.close();
}
public static void main(String[] args) {
testen.GUI();
try {
ton();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Code:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class testen2 extends JPanel implements ActionListener {
public testen2(){
JButton but = new JButton();
but.addActionListener(this);
add(but);
}
public static void GUI (){
JFrame fenster=new JFrame ();
fenster.setSize (400,240);
fenster.setTitle ("testen2");
fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JComponent newContentPane = new testen2();
newContentPane.setOpaque(true);
fenster.setContentPane(newContentPane);
fenster.setVisible(true);
}
public static void main(String[] args) {
GUI();
}
public void actionPerformed(ActionEvent e) {
testen.main(null);
}
}
Ich beschäftige mich noch nicht so lange mit Java. Hat jemand eine Idee, an was das liegen kann?
Vielen Dank
markus