2010-02-16 10 views
8

J'ai un cadre Java que je veux fermer automatiquement après 3 ou 4 secondes. J'ai découvert que je devais utiliser des discussions. mais je ne sais pas exactement comment le faire, cette partie de dumy de mon code:comment fermer un cadre Java avec des threads

package intro; 

import java.awt.*; 
import java.io.IOException; 
//import view.LangMenu; 

public class IntroClass extends Frame { 

    private int _screenWidth = 0; 
    private int _screenHeight = 0; 
    private int _screenCenterx = 0; 
    private int _screenCentery = 0; 

    //private static final String SOUND_PATH="/sounds/introSound.midi"; 
    public IntroClass() { 
     Toolkit thisScreen = Toolkit.getDefaultToolkit(); 
     Dimension thisScrrensize = thisScreen.getScreenSize(); 

     _screenWidth = thisScrrensize.width; 
     _screenHeight = thisScrrensize.height; 
     _screenCenterx = _screenWidth/2; 
     _screenCentery = _screenHeight/2; 
     setBackground(Color.pink); 
     Label lbl = new Label("Welcome To Dots Game. Samaneh Khaleghi", Label.CENTER); 
     add(lbl); 
     setUndecorated(true); 
     setLocation((_screenCenterx*50)/100,_screenCentery-(_screenCentery*50)/100); 
     setSize((_screenWidth * 50)/100, (_screenHeight * 50)/100); 

     WaitClass r = new WaitClass(); 
     r.start(); 
     view.DotsBoardFrame d=new view.DotsBoardFrame(); 
       main.Main.showScreen(d); 
    } 

    class WaitClass extends Thread { 

     boolean running = true; 

     public void run() { 
      while (running) { 
       try { 
        Thread.sleep(50); 
       } catch (InterruptedException ex) { 
        ex.printStackTrace(); 
       }     
      } 
     } 
    } 
} 

Répondre

3

dans votre cadre démarrer un nouveau thread et lui passez votre instance de cadre, et après une période de temps spécifique fermer.

class MyThread extends Thread { 

    private JFrame frame; 
    //-- getters and setters for frame 

    public void run() { 
    Thread.sleep(1000); //close the frame after 1 second. 
    frame.close(); 
    } 

} 

et dans votre classe JFrame, dans le constructeur mis spécifiquement la ligne de code suivante:

MyThread th = new MyThread(); 
th.setFrame(this); 
th.start(); 
+0

Merci Omar, je vais l'essayer :) – user261002

+0

merci, merci, son fonctionnement :)))))) – user261002

+4

Mauvaise idée de manipuler un composant AWT à partir de n'importe quel thread sauf l'EDT. –

6

Bien que AWT est censé être thread-safe, il est pas vraiment. Donc, je suggère, comme Swing, faire toutes les manipulations GUI sur le Thread AWT Event Dispatch (EDT). Pour cette tâche particulière, javax.swing.Timer devrait faire l'affaire. (Bien qu'il soit dans le paquet javax.swing, il n'y a rien de spécifique à Swing.)

Aussi, je suggèrerais fortement de ne pas étendre les classes à moins que vous ne le deviez vraiment. Il y a très peu de raisons d'étendre Thread ou Frame (malheureusement il y a beaucoup de mauvais exemples et de vieux tutoriels là-bas).

+0

salut tom, merci pour une explication utile. – user261002

2

Vous pouvez utiliser un Timer et le laisser s'occuper des threads pour vous.