Mat1010 Geschrieben 4. März 2010 Geschrieben 4. März 2010 Hallo, ich bekomme es nicht hin, dass es möglich ist das Frame mit Klick auf " X " oder alt+f4 zu schließen. Hier mein Code, was ist da falsch? Vielen Dank schonmal für eure Hilfe. import java.awt.*; import java.awt.event.*; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; import java.awt.image.*; import java.io.*; import javax.sound.midi.*; public class kneerMatthias extends Frame { public kneerMatthias(String title) { super(title); this.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { System.exit(0); } }); int frameWidth = 600; int frameHeight = 150; setSize(frameWidth, frameHeight); Dimension d = Toolkit.getDefaultToolkit().getScreenSize(); int x = (d.width - getSize().width) / 2; int y = (d.height - getSize().height) / 2; setLocation(x, y); setBackground(Color.BLACK); setResizable(false); setVisible(true); } public void paint(Graphics g) { int schlafen = 200; try { Sequence sequence = MidiSystem.getSequence(new File("smwcastle_nes.mid")); Sequencer sequencer = MidiSystem.getSequencer(); sequencer.open(); sequencer.setSequence(sequence); sequencer.start(); } catch (Exception e) { } //Zeichne M g.setColor(Color.ORANGE); g.fillRect(30, 30, 20, 20); g.drawRect(30, 30, 20, 20); schlafe(schlafen); g.setColor(Color.MAGENTA); g.fillRect(30, 50, 20, 20); g.drawRect(30, 50, 20, 20); schlafe(schlafen); g.setColor(Color.GREEN); g.fillRect(30, 70, 20, 20); g.drawRect(30, 70, 20, 20); schlafe(schlafen); g.setColor(Color.CYAN); g.fillRect(30, 90, 20, 20); g.drawRect(30, 90, 20, 20); schlafe(schlafen); g.setColor(Color.YELLOW); g.fillRect(50, 30, 20, 20); g.drawRect(50, 30, 20, 20); schlafe(schlafen); g.setColor(Color.RED); g.fillRect(70, 50, 20, 20); g.drawRect(70, 50, 20, 20); schlafe(schlafen); g.setColor(Color.LIGHT_GRAY); g.fillRect(90, 30, 20, 20); g.drawRect(90, 30, 20, 20); schlafe(schlafen); g.setColor(Color.GRAY); g.fillRect(110, 30, 20, 20); g.drawRect(110, 30, 20, 20); schlafe(schlafen); g.setColor(Color.PINK); g.fillRect(110, 50, 20, 20); g.drawRect(110, 50, 20, 20); schlafe(schlafen); g.setColor(Color.RED); g.fillRect(110, 70, 20, 20); g.drawRect(110, 70, 20, 20); schlafe(schlafen); g.setColor(Color.BLUE); g.fillRect(110, 90, 20, 20); g.drawRect(110, 90, 20, 20); //Zeichne A g.setColor(Color.BLUE); g.fillRect(140, 30, 20, 20); g.drawRect(140, 30, 20, 20); schlafe(schlafen); g.setColor(Color.WHITE); g.fillRect(140, 50, 20, 20); g.drawRect(140, 50, 20, 20); schlafe(schlafen); g.setColor(Color.YELLOW); g.fillRect(140, 70, 20, 20); schlafe(schlafen); g.drawRect(140, 70, 20, 20); g.setColor(Color.MAGENTA); g.fillRect(140, 90, 20, 20); schlafe(schlafen); g.drawRect(140, 90, 20, 20); g.setColor(Color.GRAY); g.fillRect(160, 30, 20, 20); schlafe(schlafen); g.drawRect(160, 30, 20, 20); g.setColor(Color.RED); g.fillRect(180, 30, 20, 20); schlafe(schlafen); g.drawRect(180, 30, 20, 20); g.setColor(Color.PINK); g.fillRect(180, 50, 20, 20); g.drawRect(180, 50, 20, 20); schlafe(schlafen); g.setColor(Color.BLUE); g.fillRect(180, 70, 20, 20); g.drawRect(180, 70, 20, 20); schlafe(schlafen); g.setColor(Color.RED); g.fillRect(180, 90, 20, 20); g.drawRect(180, 90, 20, 20); schlafe(schlafen); g.setColor(Color.LIGHT_GRAY); g.fillRect(160, 70, 20, 20); g.drawRect(160, 70, 20, 20); //Zeichne T1 g.setColor(Color.RED); g.fillRect(210, 30, 20, 20); g.drawRect(210, 30, 20, 20); g.setColor(Color.GREEN); schlafe(schlafen); g.fillRect(230, 30, 20, 20); g.drawRect(230, 30, 20, 20); g.setColor(Color.BLUE); schlafe(schlafen); g.fillRect(250, 30, 20, 20); g.drawRect(250, 30, 20, 20); g.setColor(Color.MAGENTA); schlafe(schlafen); g.fillRect(230, 50, 20, 20); g.drawRect(230, 50, 20, 20); g.setColor(Color.WHITE); schlafe(schlafen); g.fillRect(230, 70, 20, 20); g.drawRect(230, 70, 20, 20); g.setColor(Color.PINK); schlafe(schlafen); g.fillRect(230, 90, 20, 20); g.drawRect(230, 90, 20, 20); //Zeichne T2 schlafe(schlafen); g.setColor(Color.GRAY); g.fillRect(280, 30, 20, 20); g.drawRect(280, 30, 20, 20); g.setColor(Color.GREEN); schlafe(schlafen); g.fillRect(300, 30, 20, 20); g.drawRect(300, 30, 20, 20); g.setColor(Color.WHITE); schlafe(schlafen); g.fillRect(320, 30, 20, 20); g.drawRect(320, 30, 20, 20); g.setColor(Color.RED); schlafe(schlafen); g.fillRect(300, 50, 20, 20); g.drawRect(300, 50, 20, 20); g.setColor(Color.MAGENTA); schlafe(schlafen); g.fillRect(300, 70, 20, 20); g.drawRect(300, 70, 20, 20); g.setColor(Color.BLUE); schlafe(schlafen); g.fillRect(300, 90, 20, 20); g.drawRect(300, 90, 20, 20); //Zeichne H schlafe(schlafen); g.setColor(Color.LIGHT_GRAY); g.fillRect(350, 30, 20, 20); g.drawRect(350, 30, 20, 20); g.setColor(Color.GREEN); schlafe(schlafen); g.fillRect(350, 50, 20, 20); g.drawRect(350, 50, 20, 20); g.setColor(Color.RED); schlafe(schlafen); g.fillRect(350, 70, 20, 20); g.drawRect(350, 70, 20, 20); g.setColor(Color.BLUE); schlafe(schlafen); g.fillRect(350, 90, 20, 20); g.drawRect(350, 90, 20, 20); g.setColor(Color.MAGENTA); schlafe(schlafen); g.fillRect(370, 60, 20, 20); g.drawRect(370, 60, 20, 20); g.setColor(Color.PINK); schlafe(schlafen); g.fillRect(390, 30, 20, 20); g.drawRect(390, 30, 20, 20); g.setColor(Color.GRAY); schlafe(schlafen); g.fillRect(390, 50, 20, 20); g.drawRect(390, 50, 20, 20); g.setColor(Color.MAGENTA); schlafe(schlafen); g.fillRect(390, 70, 20, 20); g.drawRect(390, 70, 20, 20); g.setColor(Color.RED); schlafe(schlafen); g.fillRect(390, 90, 20, 20); g.drawRect(390, 90, 20, 20); //Zeichne I schlafe(schlafen); g.setColor(Color.GREEN); g.fillRect(420, 30, 20, 20); g.drawRect(420, 30, 20, 20); g.setColor(Color.ORANGE); schlafe(schlafen); g.fillRect(420, 50, 20, 20); g.drawRect(420, 50, 20, 20); g.setColor(Color.BLUE); schlafe(schlafen); g.fillRect(420, 70, 20, 20); g.drawRect(420, 70, 20, 20); g.setColor(Color.RED); schlafe(schlafen); g.fillRect(420, 90, 20, 20); g.drawRect(420, 90, 20, 20); //Zeichne A schlafe(schlafen); g.setColor(Color.ORANGE); g.fillRect(450, 30, 20, 20); g.drawRect(450, 30, 20, 20); g.setColor(Color.BLUE); schlafe(schlafen); g.fillRect(450, 50, 20, 20); g.drawRect(450, 50, 20, 20); g.setColor(Color.LIGHT_GRAY); schlafe(schlafen); g.fillRect(450, 70, 20, 20); g.drawRect(450, 70, 20, 20); g.setColor(Color.GREEN); schlafe(schlafen); g.fillRect(450, 90, 20, 20); g.drawRect(450, 90, 20, 20); g.setColor(Color.WHITE); schlafe(schlafen); g.fillRect(470, 30, 20, 20); g.drawRect(470, 30, 20, 20); g.setColor(Color.MAGENTA); schlafe(schlafen); g.fillRect(490, 30, 20, 20); g.drawRect(490, 30, 20, 20); g.setColor(Color.RED); schlafe(schlafen); g.fillRect(490, 50, 20, 20); g.drawRect(490, 50, 20, 20); g.setColor(Color.BLUE); schlafe(schlafen); g.fillRect(490, 70, 20, 20); g.drawRect(490, 70, 20, 20); g.setColor(Color.ORANGE); schlafe(schlafen); g.fillRect(490, 90, 20, 20); g.drawRect(490, 90, 20, 20); g.setColor(Color.GREEN); schlafe(schlafen); g.fillRect(470, 70, 20, 20); g.drawRect(470, 70, 20, 20); //Zeichne S schlafe(schlafen); g.fillRect(560, 30, 20, 10); g.drawRect(560, 30, 20, 10); g.setColor(Color.GRAY); schlafe(schlafen); g.fillRect(540, 30, 20, 10); g.drawRect(540, 30, 20, 10); g.setColor(Color.ORANGE); schlafe(schlafen); g.fillRect(520, 30, 20, 10); g.drawRect(520, 30, 20, 10); g.setColor(Color.RED); schlafe(schlafen); g.fillRect(520, 40, 20, 10); g.drawRect(520, 40, 20, 10); g.setColor(Color.BLUE); g.fillRect(520, 50, 20, 10); g.drawRect(520, 50, 20, 10); g.setColor(Color.YELLOW); schlafe(schlafen); g.fillRect(520, 60, 20, 10); g.drawRect(520, 60, 20, 10); g.setColor(Color.MAGENTA); schlafe(schlafen); g.fillRect(540, 60, 20, 10); g.drawRect(540, 60, 20, 10); g.setColor(Color.RED); schlafe(schlafen); g.fillRect(560, 60, 20, 10); g.drawRect(560, 60, 20, 10); g.setColor(Color.GRAY); schlafe(schlafen); g.fillRect(560, 70, 20, 10); g.drawRect(560, 70, 20, 10); g.setColor(Color.WHITE); schlafe(schlafen); g.fillRect(560, 80, 20, 10); g.drawRect(560, 80, 20, 10); g.setColor(Color.BLUE); schlafe(schlafen); g.fillRect(560, 90, 20, 20); g.drawRect(560, 90, 20, 20); g.setColor(Color.YELLOW); schlafe(schlafen); g.fillRect(540, 90, 20, 20); g.drawRect(540, 90, 20, 20); g.setColor(Color.ORANGE); schlafe(schlafen); g.fillRect(520, 90, 20, 20); g.drawRect(520, 90, 20, 20); g.setColor(Color.BLACK); schlafe(2000); for (int i = 0; i <= 600; i++) { g.drawRect(0, 0, i, 150); schlafe(5); if (i >= 50) { g.clearRect(0, 0, i - 50, 150); } } setSize(800, 600); Dimension d = Toolkit.getDefaultToolkit().getScreenSize(); int x = (d.width - getSize().width) / 2; int y = (d.height - getSize().height) / 2; setLocation(x, y); Image image = Toolkit.getDefaultToolkit().getImage("Bart-eat-my-shorts.JPEG"); if (image != null) { g.drawImage(image, 0, 0, this); } schlafe(60000); System.exit(0); } public void schlafe(int zeit) { try { Thread.sleep(zeit); } catch (Exception e) { } } public static void main(String[] args) { new kneerMatthias("kneerMatthias"); } } Zitieren
kingofbrain Geschrieben 4. März 2010 Geschrieben 4. März 2010 Kürz Deinen Code doch mal bitte auf den relevanten Teil zusammen und erzähl uns, was nicht geht. Es ist zu mühsam, Deinen Quelltext zu kopieren, in einer Datei zu speichern, zu kompilieren, auszuführen und zu schauen, wo es hakt. Hilf uns, dann helfen wir Dir. Peter Zitieren
michaTT Geschrieben 4. März 2010 Geschrieben 4. März 2010 Versuch mal: setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Zitieren
Dragon8 Geschrieben 4. März 2010 Geschrieben 4. März 2010 Versuch mal: setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Das wird ihm bei seinem Problem nicht helfen. Diese Methode ist nur für Swing Komponenten relevant, er bezieht sich aber auf AWT Komponenten. @Mat1010; Was sollen die ganzen "Schlaf" Pausen in deiner paint() Methode? und warum machst du ein "System.exit(0);" am Ende eben dieser? Wenn ich mal raten sollte was bei dir fehlerhaft läuft, denke ich, dass dein Fenster dauerhaft in seiner paint() Methode festhängt, weil es am laufenden Band "schlafen" geschickt wird, und sich irgendwann am Ende selbst beendet, dabei kann man es aber nicht über das rote Kreuz schließen, weil es die Eingabe nicht verarbeiten kann, da es ja wie gesagt die ganze Zeit noch an der paint() Methode arbeitet. Ansonsten wie kingofbrain schon sagte, mehr und ordentliche Informationen zu deinem Problem bitte. Zitieren
Mat1010 Geschrieben 4. März 2010 Autor Geschrieben 4. März 2010 (bearbeitet) Danke @Dragon, es liegt tatsächlich an den vielen Sleeps. Wenn ich das Sleep am Ende rausnehme, kann ich das Fenster schließen ^^ Mit dem Programm zeichne ich meinen Namen, die Sleeps mache ich zwischen jedes mal, wenn ein neuer rect gezeichnet wird, damit das Bild sich langsam aufbaut. Am Ende habe ich das Sleep für 60 Sekunden, damit die "Musik" die dauerhaft im Hintergrund läuft, weiter läuft und am Ende das Bild, welches eigentlich angezeigt werden sollte, nicht direkt wieder geschlossen wird. Leider funktioniert das mit dem Bild auch irgendwie nicht. Das system exit ist zum automatischen Schließen, des Fensters nach Ende der 60 Sekunden. Durch das Sleep, kann ich dann wahrscheinlich leider nicht das Fenster schließen :-/ Vllt. fällt ja jemandem noch etwas ein. @King: Ich bin der Meinung, dass der komplette Quelltext relevant ist. Ich wüsste nicht, was ich rausnehmen hönnte. Aber danke für den Hinweis, ich werde ihn mir zu herzen nehmen wenn ich mal wieder etwas hier poste. Bearbeitet 4. März 2010 von Mat1010 Zitieren
kingofbrain Geschrieben 4. März 2010 Geschrieben 4. März 2010 Servus Mat1010, nein, Du hast ein schönes Beispiel geliefert, warum der komplette Quelltext falsch war. Du hast uns durch den kompletten Quelltext auf eine falsche Fährte geführt. Hättest Du den Code auf das Wesentliche begrenzt (Fenster mit Close-Button und WindowListener), dann hättest Du gesehen, dass dort der Fehler schon mal nicht liegt. Ich habe mich nur auf diesen für mich relevanten Ausschnitt beschränkt und dort keinen Fehler gefunden. So lösen sich Sachen manchmal von alleine, wenn man versucht, das Kleinstmögliche Beispiel zu posten. Und das mit dem sleep muss so funktionieren, weil beim sleep der aktuelle Thread zum Schlafen gelegt wird. Dieser soll aber auch auf das Schließen lauschen. Weil er schläft, kriegt er nichts mit und tut auch nichts. Du müsstest also die Anwendung in einem Thread laufen lassen (inkl. Zeitmessung und sleep), und die Grafikanzeige in einem anderen Thread machen. Schöne Grüße, Peter Zitieren
Mat1010 Geschrieben 5. März 2010 Autor Geschrieben 5. März 2010 Servus Mat1010, nein, Du hast ein schönes Beispiel geliefert, warum der komplette Quelltext falsch war. Du hast uns durch den kompletten Quelltext auf eine falsche Fährte geführt. Hättest Du den Code auf das Wesentliche begrenzt (Fenster mit Close-Button und WindowListener), dann hättest Du gesehen, dass dort der Fehler schon mal nicht liegt. Ich habe mich nur auf diesen für mich relevanten Ausschnitt beschränkt und dort keinen Fehler gefunden. So lösen sich Sachen manchmal von alleine, wenn man versucht, das Kleinstmögliche Beispiel zu posten. Und das mit dem sleep muss so funktionieren, weil beim sleep der aktuelle Thread zum Schlafen gelegt wird. Dieser soll aber auch auf das Schließen lauschen. Weil er schläft, kriegt er nichts mit und tut auch nichts. Du müsstest also die Anwendung in einem Thread laufen lassen (inkl. Zeitmessung und sleep), und die Grafikanzeige in einem anderen Thread machen. Schöne Grüße, Peter Stimmt, so kann man die Sache natürlich auch angehen. Vielen Dank für die Hilfen, es funktioniert jetzt soweit. Das Thema kann geschlossen werden. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.