# [SUCHE] Java Countdown



## PhilXYLON (3. Mrz 2004)

hallo,
ich hab echt null plan von java !
aber suche einen java-countdown, wo ich nur die sekunden eintragen muss, und der mir dann life 00:01:60 -> 00:01:59 -> usw runterzählt ...
kennt jemand einen ?

THX Phil


----------



## Illuvatar (3. Mrz 2004)

Der zum Beispiel:

Musst du mit java Countdown [sekunden] aufrufen.


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

public class Countdown extends Frame
{
  public Countdown (String title)
  {
    super (title);
    addWindowListener(new WindowAdapter() {
      public void windowClosing (WindowEvent evt) {System.exit(0);}});
    setSize(300, 300);
    setVisible(true);
    while (true){
      seconds--;
      if (seconds == -1){
        seconds = 59;
        minutes--;
      }
      if (minutes == -1){
        minutes = 59;
        hours--;
      }
      repaint();
      try{
        Thread.sleep (1000);
      }catch (InterruptedException e){}
      if ((seconds == 0) && (minutes == 0) && (hours == 0)){
        getToolkit().beep();
        System.out.println ("Countdown beendet");
        break;
      }
    }
  }
  private static int hours;
  private static int minutes;
  private static int seconds;
  public void paint (Graphics g)
  {
    g.drawString (this.toString(), 50, 100);
  }
  public String toString()
  {
    return ((hours < 10) ? "0" : "") + hours + ":" + ((minutes < 10) ? "0" : "") + minutes + ":" + ((seconds < 10) ? "0" : "") + seconds;
  }
  public static void main (String[] args)
  {
    try{
      seconds = Integer.parseInt (args[0]);
      seconds++;
      minutes = seconds / 60;
      seconds %= 60;
      hours = minutes / 60;
      minutes %= 60;
    }catch (NumberFormatException e){
      System.out.println("Not a Number!");
      System.exit (1);
    }catch (ArrayIndexOutOfBoundsException e){
      System.out.println("Too few arguments: Countdown [seconds]");
      System.exit (1);
    }
    new Countdown("Countdown");
  }
}
```

00:01:60 kannst du damit aber nicht machen, 120 Sekunden sind 00:02:00


----------



## PhilXYLON (4. Mrz 2004)

ups, sorry stimmt 
wie geb ich das ergenis wieder ?
und muss der script in <script> ?

verstehe von java an sich nicht viel   , bin eher der php typ *g*
THX


----------



## Beni (4. Mrz 2004)

@Illuvatar

:-D Dein Code wird nicht exakt genau auf die Millisekunden funktionieren :-D

- 1 Sekunde warten
- Code ausführen
(insgesammt 1 Sekunde + ein paar Millis )

- Warten
- ...
(2 Sekunden + 2 * ein paar Millis )

Man könnte z.B.: mit System.currentTimeMillis() die Zeit messen, die der Code benötigt (Minuten berechnen, println...), und von der nächsten Wartesekunde abziehen   

Gruss Beni


----------



## Illuvatar (4. Mrz 2004)

@Beni

Weiß ich auch, hab ich aber schnell geschrieben und vernachlässigt.


```
long time_begin = System.currentTimeMillis();
    while (true){ 
      seconds--; 
      if (seconds == -1){ 
        seconds = 59; 
        minutes--; 
      } 
      if (minutes == -1){ 
        minutes = 59; 
        hours--; 
      } 
      repaint(); 
      while (System.currentTimeMillis() != (time_begin + 1000))
        try{
          Thread.sleep (0, 500);
        }catch (InterruptedException e){}
      time_begin = System.currentTimeMillis();
      if ((seconds == 0) && (minutes == 0) && (hours == 0)){ 
        getToolkit().beep(); 
        System.out.println ("Countdown beendet"); 
        break; 
      } 
    }
```

So besser?  (Ja, kann noch bis zu einer halben Millisekunde pro Sekunde falsch sein  )

Klappt bei dir eigentlich das


```
getToolkit().beep();
```
?


@PhilXYLON

Das ist eine Java-Applikation, kein Javascript. :evil: 

Du musst dafür von http://www.java.sun.com das Java-SDK runterladen, den Code in einer Datei Countdown.java abspeichern und mit javac Countdown.java compilieren.

Starten musst du es dann mit java Countdown [Sekunden] oder
    javaw Countdown [Sekunden].


----------



## Beni (4. Mrz 2004)

> klappt bei dir das Toolkit.beep()


Es beept. Mit dem Default-Peep des Systems.


----------



## Illuvatar (4. Mrz 2004)

> Es beept. Mit dem Default-Peep des Systems.



Komisch, bei mir nicht ???:L


----------



## PhilXYLON (4. Mrz 2004)

@Illuvatar

Hi,
ich versteh davon nix ... 
ich wollte doch nur was haben wo ich die sekunden eintragen muss, und dann life runtergezählt wird im browser ...
kannst du mir das nicht bitte machen ? auf der seite geht irrgentwie garnix ...  :?: 
und den code, den ich dann ins html eintragen muss zur anzeige ..

Wäre echt top von dir !!

THX


----------



## Roar (4. Mrz 2004)

*hmpf*


> ich hab echt null plan von java !
> aber suche einen java-countdown,


du redest von java. du weisst was das ist? java.. und nicht javascript *hmpf* von website oder so erwähnst du nix.... und von javascript auch nicht. dann schreibst du das alles auchnoch in ein Java forum ( nichtmal in das JavaScript forum, was dann ja ok gewesen wär)...
dann machen sich zwei leute die mühe und schreiben dir nen code, genau da swas dein beitrag verlangte...



> und muss der script in <script> ?
> 
> verstehe von java an sich nicht viel , bin eher der php typ *g*



 :idea:  aha.. ganz plötzlich ne website, aber immernoch java. und wenn du php können willst, dann solltest du wissen was Java ist, und was JavaScript ist.   :!: 

dazu sag ich nur: hmpf  :evil: 

und was meinst du dann auch noch damit:


> auf der seite geht irrgentwie garnix ...



du hast doch nicht etwa den Java code in das html eingegeben oder? [schild=5 fontcolor=000000 shadowcolor=C0C0C0 shieldshadow=1]tzzzzzzzzz[/schild]


----------



## Guest (4. Mrz 2004)

ich mein nich die seite hier, sondern der link von dir ...

und wenn man php kann, kennt man nicht alles verschiedenes von java ... ich hab mich damit noch nie mit beschäftigt, ich kenn nich den untershcied zwischen java, java applets, usw ...

und das habe ich nich in html reingemacht, weil das so eh nich gehen kann ...


----------



## PhilXYLON (4. Mrz 2004)

sorry Name vergessen,
aber man könnt das hier ja mal in das richtige verschieben ...


----------



## Roar (5. Mrz 2004)

na wie auch immer.. hier:
java ist eine Programmiersprahe
Java Applets sind Programme, geschrieben in der programmiersprache Java, nur mit dem vorteil, dass sie in Webseiten eingebettet werden können.
JavaScrpit ist was ganz anderes als Java. JavaScrpit ist eine Scriptsprache entwickelt von Netscape Comms. und hieß ursprünglich LiveScript, und sie hätten den namen auch so lassen sollen *hmpf*


----------



## Illuvatar (5. Mrz 2004)

Als Applet könnte man es so machen:


```
import java.awt.*;
import java.awt.event.*;
import java.applet.*;

class CountdownFrame extends Frame
{
  public CountdownFrame (String title)
  {
    super (title);
    setVisible(true);
    int sizeX = getInsets().left + getInsets().right + getToolkit().getFontMetrics(getGraphics().getFont()).stringWidth (toString());
    int sizeY = getInsets().top + getInsets().bottom + getToolkit().getFontMetrics(getGraphics().getFont()).getHeight();
    setSize (sizeX, sizeY);
    long time_begin = System.currentTimeMillis();
    while (true){
      seconds--;
      if (seconds == -1){
        seconds = 59;
        minutes--;
      }
      if (minutes == -1){
        minutes = 59;
        hours--;
      }
      repaint();
      while (System.currentTimeMillis() != (time_begin + 1000))
        try{
          Thread.sleep (0, 500);
        }catch (InterruptedException e){}
      time_begin = System.currentTimeMillis();
      if ((seconds == 0) && (minutes == 0) && (hours == 0)){
        getToolkit().beep();
        System.out.println ("Countdown beendet");
        break;
      }
    }
    try{
      Thread.sleep (2500);
    }catch (InterruptedException e){}
    dispose();
  }
  private static int hours;
  private static int minutes;
  private static int seconds;
  public void paint (Graphics g)
  {
    g.drawString (this.toString(), getInsets().left + 10, getInsets().top + 10);
  }
  public String toString()
  {
    return ((hours < 10) ? "0" : "") + hours + ":" + ((minutes < 10) ? "0" : "") + minutes + ":" + ((seconds < 10) ? "0" : "") + seconds;
  }
  public static CountdownFrame cf;
  public static void main (String[] args)
  {
    try{
      seconds = Integer.parseInt (args[0]);
      seconds++;
      minutes = seconds / 60;
      seconds %= 60;
      hours = minutes / 60;
      minutes %= 60;
    }catch (NumberFormatException e){
      System.out.println("Not a Number!");
      System.exit (1);
    }catch (ArrayIndexOutOfBoundsException e){
      System.out.println("Too few arguments: Countdown [seconds]");
      System.exit (1);
    }
    cf = new CountdownFrame ("Countdown");
  }
}
public class Countdown extends Applet
{
  public void start()
  {
    CountdownFrame.main (new String[]{getParameter("Sekunden")});
  }
  public void stop()
  {
    CountdownFrame.cf.dispose();
  }
}
```

Das kannst du auf deine Seite bringen mit:


```
<Applet Code="Countdown.class" Width=1 Height=1>
<param name="Sekunden" value="9"/>
</Applet>
```

Das ändert allerdings nichts daran, dass du von hier das SDK runterladen musst und die Datei compilieren musst.

(Ich weiß, dass getFontMetrics() deprecated ist. Ging aber schneller, und ich kenne keine Alternative zu stringWidth())


----------



## Illuvatar (6. Mrz 2004)

@PhilXYLON
Hat das jetzt funktioniert?

@all
Kennt denn jemand eine Alternative zu stringWidth() in FontMetrics?


----------



## PhilXYLON (6. Mrz 2004)

Hallo,
mein prob ist, das ich die anzahl der sekunden aus einer mysql db nehme und die ja in den "script" rein muss...
deswegen hatte ich auch nen java script gesucht...


----------



## Roar (6. Mrz 2004)

1. man könnte die zeit dem applet ja auch als parameter übergeben.
2. lasst doch das umständliche applet zeug. hier, view:
http://roflweb.de/Script/Zeit/restIndex.htm
da sind mehrere download scripts, eins davon wird wohl funzen.


----------



## PhilXYLON (7. Mrz 2004)

http://roflweb.de/Script/Zeit/countup.html
genau sowas suche ich, nur mit runterzählen und es soll nur dastehen "Beendet" ...


----------

