Programm lässt sich nicht beenden

Status
Nicht offen für weitere Antworten.

Kaan

Bekanntes Mitglied
Ich hab folgendes Programm aus dem Handbuch der Java-Programmierung abgetippt, aber es lässt sich bei mir und meinem Freund nicht Beenden. Ich hab auch auf der www.javabuch.de Website geschaut, ob sich vielleicht ein Druckfehler eingeschlichen hat. Vielleicht könnt ihr mir ja helfen...

Hier das Listing:
Code:
/* Listing2702.java */

import java.awt.*;
import java.awt.event.*;

public class Listing2702
extends Window
implements KeyAdapter
{
  public static void main(String[] args)
  {
    final Listing2702 wnd = new Listing2702();
    wnd.setLocation(new Point(0,0));
    wnd.setSize(1024, 768);
    wnd.setVisible(true);
    wnd.requestFocus();
    wnd.addKeyListener(
      new KeyAdapter() {
        public void keyPressed(KeyEvent event)
        {
          wnd.setVisible(false);
          wnd.dispose();
          System.exit(0);
        }
      }
    );
  }

  public Listing2702()
  {
    super(new Frame());
    setBackground(Color.black);
  }

  public void paint(Graphics g)
  {
    g.setColor(Color.red);
    g.drawString(
      "Bildschirmgröße ist "+
      getSize().width+"*"+getSize().height,
      10,
      20
    );
    g.drawString("Bitte eine Taste drücken",10,40);
  }
}

Danke im Vorraus.
 
öhm, was soll das heißen "lässt sich nicht beenden". wenn du eine taste drückst sollte das programm beendet werden.
 
Such mal nach WindowListener bzw. nach WindowAdapter, wenn du willst, dass sich dein Programm beendet, wenn du auf "Schließen" drückst.
 
Versuchs mal so:
Code:
import java.awt.*;
import java.awt.event.*;

public class Listing2702 extends Frame
{
	public static void main(String[] args)
	{
		final Listing2702 wnd = new Listing2702();
		wnd.setLocation(new Point(0, 0));
		wnd.setSize(100, 100);
		wnd.setVisible(true);
		wnd.requestFocus();
		wnd.addKeyListener(new KeyAdapter()
		{
			public void keyPressed(KeyEvent event)
			{
				wnd.setVisible(false);
				wnd.dispose();
				System.exit(0);
			}
		});
	}

	public Listing2702()
	{
		setBackground(Color.black);
	}

	public void paint(Graphics g)
	{
		g.setColor(Color.red);
		g.drawString("Bildschirmgröße ist " + getSize().width + "*" + getSize().height, 10, 20);
		g.drawString("Bitte eine Taste drücken", 10, 40);
	}
}
 
@Roar
Das weiß ich auch! Ich habe dieses Beispiel 1:1 aus dem Buch übernommen und es lässt sich NICHT mit einem Tastendruck beenden.

@Reality
Mit dem WindowListener und WindowAdapter kenne ich mich recht gut aus, nur irgendwie will das Beispiel nicht korrekt funktionieren.

@foobar
Ja, das klappt natürlich. Aber wieso will das nicht auch bei einem Vollbild Window funktionieren? Ich will nämlich ein Spiel im Vollbild Modus programmieren und da benötige ich die Klasse Window.

Trotzdem Danke an alle...vielleicht kann mir ja jemand anderer weiterhelfen...
 
Doch, gibt es. Und wenn man das implements-Zeug weglässt, kompilierts auch. Schließen kann mans trotzdem net, weil man java.awt.Windows aus irgendnem Grund net dazu kriegt, auf Tastatureingaben zu reagieren, das Problem hat mich schon genug genervt.
Ersetzt man Window durch Frame und passt den Konstruktor an, tuts.
Wenn man dann noch wnd.setUndecorated (true) aufruft, siehts auch wie ein Window aus.
Und wenn man dann noch wnd.setSize(wnd.getToolkit().getScreenSize()); schreibt, gibt das ganze Programm einen Sinn.
Dann müssen wir nur noch ne serialVersionUID hinzufügen, um die 1.5-Compiler-Warnung zu unterbinden, und fertig.

Code:
/* Listing2702.java */

import java.awt.*;
import java.awt.event.*;

public class Listing2702
extends Frame
{
  public static final long serialVersionUID = 0l;
  public static void main(String[] args)
  {
    final Listing2702 wnd = new Listing2702();
    wnd.setLocation(new Point(0,0));
    wnd.setSize(wnd.getToolkit().getScreenSize());
    wnd.setUndecorated (true);
    wnd.setVisible(true);
    wnd.requestFocus();
    wnd.addKeyListener(
      new KeyAdapter() {
        public void keyPressed(KeyEvent event)
        {
          wnd.setVisible(false);
          wnd.dispose();
          System.exit(0);
        }
      }
    );
  }

  public Listing2702()
  {
    super("test");
    setBackground(Color.black);
  }

  public void paint(Graphics g)
  {
    g.setColor(Color.red);
    g.drawString(
      "Bildschirmgröße ist "+
      getSize().width+"*"+getSize().height,
      10,
      20
    );
    g.drawString("Bitte eine Taste drücken",10,40);
  }
}
 
Ja, ok, falls ich das Problem nicht beseitigen kann, werde ich ein Frame anstatt eines Windows verwenden. Aber wozu ist ein "serialVersionUID" gut?
 
Das ist nur für die Serialisierung wichtig, aber weil Frame bzw Window Serializable ist, meckert der 1.5-Compiler, wenn es die Variable nicht gibt.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben