Zum Inhalt springen

AWT Fenster Schließen


Mat1010

Empfohlene Beiträge

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");

  }

}

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 von Mat1010
Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...