Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

  }

}

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

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.

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

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

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.

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.