#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 } }}} + Multi-Zitat Zitieren
#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. + Multi-Zitat Zitieren
#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 + Multi-Zitat Zitieren
#4 26. Dezember 2008 AW: Prog. hängt sich trotz Interrupt auf ~push~ kann des nich einer mal debuggen oder so + Multi-Zitat Zitieren
#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(); } } } + Multi-Zitat Zitieren
#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 + Multi-Zitat Zitieren