Counter im JWindow mit Thread und dispose

  • Themenstarter Themenstarter Oekel
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
O

Oekel

Gast
Hi Leute, ich versuche nun seid 2Std, dem Misterium von Fenstern auf den Grund zu gehen, die nicht in der Main erzeugt werden.

Folgendes soll aus irgendeinem Programmteil aufgerufen werden:
new Info();
Folgendes soll passieren:
Das Fenster erscheint mit dem Wert 3
ändert sich nach kurzer Zeit auf 2 usw.
Fenster schließt sich und der Programmfluss soll nach "new Info();" weitergehen.

Sinn des ganzen:
Es soll eine Art Abbruchfenster werden, welches einen Counter Anzeigt, wie lange man noch "Abrechen" drücken kann.

Code:
public class Info extends JWindow implements ActionListener {
	private int count = 3;

	private JButton countb = new JButton();
	
	
public Info() {
		countb.addActionListener(this);
		JPanel content = (JPanel) getContentPane();
		content.setBackground(Color.white);

		int width = 50;
		int height = 50;
		Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
		int x = (screen.width - width);
		int y = (screen.height - height-25);
		setBounds(x, y, width, height);

		add(countb, BorderLayout.CENTER);
		Color oraRed = new Color(156, 20, 20, 255);
		// this.setBorder(BorderFactory.createLineBorder(oraRed, 10));
		while(count > 0)
		{
			countb.setText(String.valueOf(count));
			try
			{
				Thread.sleep(300);
			} catch (Exception e)
			{
			}
			count--;
			repaint();
			
			
		}
		dispose();
		setVisible(true);
		
	}

Leider passiert nur folgendes:

Das Fenster wird erst angezeigt, wenn die Zahl 1 draufsteht und schließt sich dann auch nicht selber.

Meine Vermutung:
repaint wird est ausgeführt, nach dem die koplette Methode abgearbeitet worden ist?

Könnt ihr mir helfen, bzw. einfach am Code rumfuschen, so dass es laufen könnte?


===============================================
PS: gibt es Java-Bibliotheken, die das gleiche leisten wie folgendes:
Code:
Process p = Runtime.getRuntime().exec(
					"rasphone.exe -t,RnaDial <<name>>");
			p.waitFor();
vor allem, so dass man auch über die dann aufgebaute Verbindung mit dem Systembrowser surfen und downloaden kann?[/code]
 
Leroy42 hat gesagt.:
Du mußt das Runterzählen in einen eigenständigen Thread auslagern.

Ich stell mich, so glaube ich, ein wenig dumm mit Threads an.
Auch wenn ich einen neuen erstelle, so schaffe ich es immer wieder die Abhängigkeiten so zu setzen, dass es nix gebracht hat.
Könnt ihr mir kurz ein Bsp. geben. Jene die ich beim suchen finde sind echt zu oversized. Ist doch eingendlich nur ein 3Zeiler, oder? 🙁
 
Oekel hat gesagt.:
..einfach am Code rumfuschen, so dass es laufen könnte?..
Code:
public class Info extends JWindow implements ActionListener {
    private int count = 3;
    private JButton countb = new JButton();
    private javax.swing.Timer timer;
    public Info() {
        countb.addActionListener(this);
        JPanel content = (JPanel) getContentPane();
        content.setBackground(Color.white);
        int width = 50;
        int height = 50;
        Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
        int x = (screen.width - width);
        int y = (screen.height - height-25);
        setBounds(x, y, width, height);
        add(countb, BorderLayout.CENTER);
        Color oraRed = new Color(156, 20, 20, 255);
        // this.setBorder(BorderFactory.createLineBorder(oraRed, 10));
        timer = new javax.swing.Timer(300, new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                if(count > 0) {
                    countb.setText(String.valueOf(count));
                    count--;
                    setVisible(true);
                }else{
                    timer.stop();
                    dispose();
                }
            }
        });
        timer.setInitialDelay(0);
        timer.start();
    }
}
Die zweite Frage hat offensichtlich nichts mit dem Thema zu tun und gehört wohl besser in einen neuen Thread :wink:
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben