[Java] Prog. hängt sich trotz Interrupt auf

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von unix, 22. Dezember 2008 .

  1. 22. Dezember 2008
    Prog. hängt sich trotz Interrupt auf

    Hoi, hier mein Timer, mit Einstellmöglichkeit!!

    Die Methode funzt, das sieht man an der console!
    Aber der Frame mit dem Textfeld in dem die restliche Zeit drin stehen soll, hängt sich auf!

    Also einstellen bis wann der timer gehen soll, auf Start klicken dann öffnet sich der neue Frame, indem die übrige Zeit drinn steht, aber dieser hängt sich auf und die methode läuft in der console weiter.

    Kann einer den Fehler finden oder wieso das Ding halt net läuft

    Das Teil brauch ich auch für mein nächste Projekt xD

    Code:
    import javax.swing.*;
    
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    
    public class Timer extends Thread implements ActionListener {
     public static void main(String[] args){
     new Timer().OpenFrame();}
     JTextField Tag =new JTextField("1",4); //Tag
     JTextField Monat =new JTextField("1",4); // Monat
     JTextField Jahr =new JTextField("2009",4);// Jahr
     JTextField Stunde =new JTextField("0",4); // Stunde
     JTextField Minute =new JTextField("0",4); //Minute
     JPanel pNorth = new JPanel();
     JPanel pCenter = new JPanel();
     JFrame mFrame,kFrame;
     JButton start = new JButton ("start");
     JTextField Count =new JTextField("");
     int a,b,c,d,e;
    
     
     public void finish(){
     Count.setText ("HAPPY NEW YEAR");
     Count.setForeground (Color.green);
     Count.setBackground (Color.black);
     
     try {
     Thread.sleep(600); //Methode schläft für 600 Millisekunden
     } catch (InterruptedException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();}
     Count.setForeground (Color.black);
     try {
     Thread.sleep(600); //Methode schläft für 600 Millisekunden
     } catch (InterruptedException e2) {
     // TODO Auto-generated catch block
     e2.printStackTrace();}
     }
    
     @SuppressWarnings("deprecation")
     public void holezeit(){
     int a = Integer.parseInt(Tag.getText());
     int b = ((Integer.parseInt(Monat.getText()))-1);
     int c = ((Integer.parseInt(Jahr.getText()))-1900);
     int d = Integer.parseInt(Stunde.getText());
     int e = Integer.parseInt(Minute.getText());
     java.util.Date sylvester2009= new java.util.Date(c,b,a,d,e);//Hier werden die Einstellung für das Datum getroffen
     long curTime=System.currentTimeMillis();
     long diff=sylvester2009.getTime()-curTime;
     long day = diff/86400000;
     long hour = (diff % 86400000)/3600000;
     long min = (diff % 3600000)/60000;
     long sec = (diff % 60000)/1000;
     System.out.printf("Noch %d Tage, %d Stunden und %d Minuten und %d Sekunden",day,hour,min,sec); 
     String dayleft = new String (Long.toString(day));
     String hourleft = new String (Long.toString(hour));
     String minutesleft = new String (Long.toString(min));
     String secondsleft = new String (Long.toString(sec));
     if (dayleft.equals("0")){
     if (hourleft.equals("0")){
     if (minutesleft.equals("0")){
     if (secondsleft.equals("0")){
     kFrame.setVisible(true);
     Count.setVisible(true);
     Count.setText ("HAPPY NEW YEAR");
     for(;true; ){
     finish(); // Endlosschleife
     }
     
     }}}}
     Count.setHorizontalAlignment(JTextField.CENTER);
     Count.setText(dayleft+ "d:" + hourleft + "h:" + minutesleft + "m:" + secondsleft+"s" ); //Uhrzeit wird in Textfeld geschrieben
     try {
     Thread.sleep(1000); //Methode schläft für 600 Millisekunden
     } catch (InterruptedException e1) {
     // TODO Auto-generated catch block
     e1.printStackTrace();}
     }
     
     public void OpenFrame(){
     mFrame=new JFrame("Settings");
     mFrame.setSize(400,150);
     mFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     mFrame.setVisible(true);
     mFrame.setLayout(new BorderLayout());
     mFrame.add(BorderLayout.NORTH, pNorth);
     mFrame.add(BorderLayout.CENTER, pCenter);
     pNorth.setVisible(true);
     pCenter.setVisible(true);
     pNorth.setLayout (new FlowLayout());
     pNorth.add(Tag);
     pNorth.add(Monat);
     pNorth.add(Jahr);
     pNorth.add(Stunde);
     pNorth.add(Minute);
     pCenter.setLayout(new FlowLayout());
     pCenter.add(start);
     start.setVisible(true);
     start.addActionListener(this);}
    
     @Override
     public void actionPerformed(ActionEvent b) {
     final String s = b.getActionCommand () ;
     if(s.equals("start")){
    
    kFrame = new JFrame ("Countdown");
    kFrame.setVisible(true);
    kFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    kFrame.setExtendedState(Frame.MAXIMIZED_BOTH);
    kFrame.setLayout (new GridLayout(1,1));
    kFrame.add(Count);
    Count.setVisible(true);
    
    
     for(;true; ){
     holezeit(); // Endlosschleife
     }
     
     }}}
     
  2. 22. Dezember 2008
    AW: Prog. hängt sich trotz Interrupt auf

    versuch dein programm mal zu debuggen. kommt er überhaut bis zu count.settext? bzw. gib an dieser stelle was auf der console aus! im moment seh ich da keinen eindeutigen fehler ... kanns leider selbst nicht debuggen, komm erst heute abend nach hause.
     
  3. 22. Dezember 2008
    AW: Prog. hängt sich trotz Interrupt auf

    Und ich kann leider net so debuggen ^^ bei mir zeigt er da auch iwie nix an xD

    Und ja er kommt bis zum Count.setText(""); hab mal das
    System.out.printf("Noch %d Tage, %d Stunden und %d Minuten und %d Sekunden",day,hour,min,sec);

    einfach drunter gesetzt und er schmeißt den Countdown noch in die console.

    wäre echt nett wenn du dann mal nachgucken könntest obs bei dir läuft
     
  4. 26. Dezember 2008
    AW: Prog. hängt sich trotz Interrupt auf

    ~push~


    kann des nich einer mal debuggen oder so
     
  5. 26. Dezember 2008
    AW: Prog. hängt sich trotz Interrupt auf

    habs jetzt soweit mal korrigiert, damits klappt!

    irgendwie wollte die swing das threadsleep nicht, darum läuft das ganze jetzt über den timer der swing klasse!

    bei fragen, meld dich einfach!

    lg

    Code:
    import javax.swing.*;
    
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.util.Date;
    
    public class Timer extends Thread implements ActionListener {
     public static void main(String[] args) {
     new Timer().OpenFrame();
     }
    
     JTextField Tag = new JTextField("1", 4); // Tag
     JTextField Monat = new JTextField("1", 4); // Monat
     JTextField Jahr = new JTextField("2009", 4);// Jahr
     JTextField Stunde = new JTextField("0", 4); // Stunde
     JTextField Minute = new JTextField("0", 4); // Minute
    
     Date settedDate = new Date(); // provided date
     javax.swing.Timer t; // jframe timer
     
     JPanel pNorth = new JPanel();
     JPanel pCenter = new JPanel();
     JPanel cNorth = new JPanel();
     JPanel cCenter = new JPanel();
     JFrame mFrame; // settings frame
     JFrame cFrame; // countdown frame
     JButton start = new JButton("start");
     JTextField Count = new JTextField("CountDown");
    
     long day, hour, min, sec;
    
     public void finish() {
     Count.setText("HAPPY NEW YEAR");
     Count.setForeground(Color.green);
     Count.setBackground(Color.black);
     }
    
     public void getTimeLeft() {
     long curTime = System.currentTimeMillis();
     long diff = settedDate.getTime() - curTime;
    
     day = diff / 86400000;
     hour = (diff % 86400000) / 3600000;
     min = (diff % 3600000) / 60000;
     sec = (diff % 60000) / 1000;
    
     if (day + hour + min + sec != 0) {
     Count
     .setText(day + "d: " + hour + "h: " + min + "m: " + sec
     + "s ");
     } else {
     finish();
     t.stop();
     }
     }
    
     public void OpenFrame() {
     mFrame = new JFrame("Settings");
     mFrame.setSize(400, 150);
     mFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     mFrame.setVisible(true);
     mFrame.setLayout(new BorderLayout());
     mFrame.add(BorderLayout.NORTH, pNorth);
     mFrame.add(BorderLayout.CENTER, pCenter);
     pNorth.setVisible(true);
     pCenter.setVisible(true);
     pNorth.setLayout(new FlowLayout());
     pNorth.add(Tag);
     pNorth.add(Monat);
     pNorth.add(Jahr);
     pNorth.add(Stunde);
     pNorth.add(Minute);
     pCenter.setLayout(new FlowLayout());
     pCenter.add(start);
     start.setVisible(true);
     start.addActionListener(this);
     mFrame.pack();
     }
    
     public void createCountdown() {
     cFrame = new JFrame("CountDown");
     cFrame.setSize(300, 200);
     cFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     cFrame.setBackground(Color.white);
     mFrame.setVisible(false); // disable settings frame
     Count.setHorizontalAlignment(JTextField.CENTER);
     Count.setBackground(Color.white);
     Count.setVisible(true);
     cFrame.add(Count);
     cFrame.setVisible(true);
    
     int a = Integer.parseInt(Tag.getText());
     int b = ((Integer.parseInt(Monat.getText())) - 1);
     int c = ((Integer.parseInt(Jahr.getText())) - 1900);
     int d = Integer.parseInt(Stunde.getText());
     int m = Integer.parseInt(Minute.getText());
     settedDate = new java.util.Date(c, b, a, d, m);
    
     t = new javax.swing.Timer(1000, new ActionListener() {
     public void actionPerformed(ActionEvent e) {
     getTimeLeft();
     }
     });
     t.start();
     }
    
     public void actionPerformed(ActionEvent b) {
     final String s = b.getActionCommand();
     if (s.equals("start")) {
     createCountdown();
     }
     }
    }
    
    
     
  6. 27. Dezember 2008
    AW: Prog. hängt sich trotz Interrupt auf

    hhmm joa jetzt läuft die Methode endlich ^^

    Jetzt noch was kleines!!

    Und ich wollt das des Textfeld finishtext (auch aufm Bild zu sehen) wenn man reinklickt finishtextsetText(""); wird.

    Hab schon alles hinzugefügt, aber es funzt iwie nich
     
  7. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.