# einfaches Countdownprogramm Handy



## Quatermain (17. Aug 2009)

Hallo Leute,
ihr könnt mir sicher helfen, vielleicht kann ich euch dafür ja auch bei irgendetwas behilflich sein 

Es geht um folgendes:
ich möchte ein winzig kleines JAVA2ME "Programm" schreiben, welches mir auf meinem Handy(LG KE970) die Zeit bis zum Ende der jeweiligen Schulstunde (und das aktuelle Fach) anzeigt. Ich habe damit bereits erfolgreich meinen Taschenrechner programmiert, ein JAVA-SCRIPT-Webseiten dings habe ich auch schon fertig... auf Knopfdruck gibt mir der TR, bzw. die Webseite aus, wie lange die aktuelle Stunde/Pause noch dauert(in min und sec).

Das ganze möchte ich nun auch auf mein Handy bekommen... ich habe mir dazu schon edliche tutorials durchgelesen, versucht beispiele zu zeitrechnungen zu bekommen, google gab keine brauchbare antworten... also ich habe mich schon ausgiebig erfolglos informiert. meine letzte chance: ich muss irgendwen nerven(tue ich äußerst ungerne) 

Was ich jetzt direkt brauche ist ein Ansatz, wie ich ein einfaches Handy-Programm baue, das die Zeit aus der internen Uhr ausliest, damit etwas rechnet und dies dann als Textzeile einfach ausgibt(per tastendruck oder noch besser automatisch in einer Schleife). Ganz simpel, ist bestimmt voll einfach, ich habe nur noch nirgends gefunden wie ich die Uhr ansteuere... und wie ich dies dann ausgebe habe ich auch noch nicht(ganz) verstanden..

mein Ansatz in JAVA-SCRIPT

```
<script type="text/javascript">

var jetzt = new Date();
var sekunden = jetzt.getSeconds();
var Min = jetzt.getMinutes();
var Std = jetzt.getHours();
var time = Std*3600+Min*60+sekunden; //aktuelle Zeit in sec
var h1 = 26400; //stunde 1
var p1 = 29100; //pause 1
var h2 = 29400; //...
var p2 = 32100;
var h3 = 33300;
var p3 = 36000;
var h4 = 36300;
var p4 = 39000;
var h5 = 40200;
var p5 = 42900;
var h6 = 43200;
var end = 45900;

if(time<end){var real = 45900;var hou = "Stunde 6";} //überprüfung, welche stunde/pause gerade läuft und setzen der Endzeit
if(time<h6){var ende = 43200;var hou = "Pause 8";}
if(time<p5){var ende = 42900;var hou = "Stunde 5";}
if(time<h5){var ende = 40200;var hou = "Pause 4";}
if(time<p4){var ende = 39000;var hou = "Stunde 4";}
if(time<h4){var ende = 36300;var hou = "Pause 3";}
if(time<p3){var ende = 36000;var hou = "Stunde 3";}
if(time<h3){var ende = 33300;var hou = "Pause 2";}
if(time<p2){var ende = 32100;var hou = "Stunde 2";}
if(time<h2){var ende = 29400;var hou = "Pause 1";}
if(time<p1){var ende = 29100;var hou = "Stunde 1";}
var temp1 = ende - time; //endzeit - aktuelle zeit = verbleibende zeit bis zum ende
var temp2 = (temp1/60); // rechnet verbleibende minuten aus
var min2 = (Math.floor(temp2)); //rechnet verbleibende sekunden aus
var sek2 = temp1-(min2*60);     //immernoch
document.write(hou+" endet in:<br>"+min2+":"+sek2); //ausgabe der Stunde sowie der Zeit bis zum ende der stunde(in min:sek)
</script>
```

Vielen Dank schonmal für alle Bemühungen und die (hilfreichen)Antworten, bin für jede Hilfe dankbar... vielleicht kann jemand das Programm ja auch für Studienzeiten oder so verwenden 

Gruß,
Quatermain


----------



## The_S (17. Aug 2009)

Dein erstes Problem ist, dass du Java Script mit Java verwechselst. Java ist aber etwas ganz anderes als Java Script! Und dein zweites Problem ist, dass du Java Programme nicht einfach auf einem Handy ausführen kannst, sondern dass sowas mit Java ME programmiert werden muss.


----------



## MiDniGG (17. Aug 2009)

The_S hat gesagt.:


> Dein erstes Problem ist, dass du Java Script mit Java verwechselst.



Tut er doch gar nicht... Er meinte ja nur, dass er schon mal ein Bsp. in JS gemacht hat...



The_S hat gesagt.:


> Und dein zweites Problem ist, dass du Java Programme nicht einfach auf einem Handy ausführen kannst, sondern dass sowas mit Java ME programmiert werden muss.



Das weiß er ja auch, er weiß nur nicht wie er Java ME programmieren soll... 

@Quatermain: Du könntest Dir mal den Thread hier anschaun http://www.java-forum.org/java-2-microedition/550-der-anfang-mit-der-microedition.html . Oder einfach mal so nach Tutorials für Java ME suchen. Denn hier wird dir keiner den kompletten Quellcode vor die Füße schmeißen...  Also wenigsten die Grundlagen von ME solltest Du können...


----------



## Quatermain (17. Aug 2009)

Huhu,
ich habe mich natürlich schon informiert... eine einfach Ausgabe könnte ich ja auch noch hinbekommen... die Berechnungen krige ich auch hin, das ist alles kein Probem. Wo ich im Moment hänge ist der Teil, bei dem ich die Zeit aus der Internen Uhr auslesen muss... und das habe ich leider noch nirgends gefunden... 

kann ich damit genauso arbeiten wie mit java sonst? also

```
stunde = calender.get(int HOUR_OF_DAY)
```
ich habe wirklich nichts darüber gefunde, wie ich die Zeit eines Handys in so ein Datenfeld reinbekomme. JAVA ME hat ja nicht die selben Funktionen wie das normale, gibt es überhaupt die Möglichkeit universal von jedem Handy die Zeit auszulesen, oder ist das individuell anders?

den ganzen Code brauche ich ja nicht, kleine Tipps wie ich das mache würden ja schon reichen 

Danke
Quatermain


----------



## The_S (17. Aug 2009)

Ja, das funktioniert bei allen Handys identisch. Du kannst anstatt in der JDK Dokumentation einfach in der Java ME Dokumentation nachsehen. Für MIDP 2.0 bspw.

MID Profile

bzw. dein Calendar

Calendar (MID Profile)

@MiDniGG was machst du hier? Du sollst doch im Urlaub sein


----------



## Quatermain (18. Aug 2009)

Hey,
also ich denke die wichtigsten Sachen habe ich zusammengeschustert bekommen.. ich bin mir nur nicht sicher wie ich das in der richtigen Reihenfolge zusammenstellen muss...

JAVA(ME) ist halt doch was ganz anderes als Assembler, SiemensGraph oder PHP 

würde dies als berechnende funktion gehen?

```
public void update () {

int time = calendar.get.SECOND + (calendar.get.MINUTE * 60) + (calendar.get.HOUR_OF_DAY * 3600); //ist das richtig geschrieben?

if(time<end){int ende = 45900;} //überprüfung, welche stunde/pause gerade läuft und setzen der Endzeit
if(time<h6){int ende = 43200;}
if(time<p5){int ende = 42900;}
if(time<h5){int ende = 40200;}
if(time<p4){int ende = 39000;}
if(time<h4){int ende = 36300;}
if(time<p3){int ende = 36000;}
if(time<h3){int ende = 33300;}
if(time<p2){int ende = 32100;}
if(time<h2){int ende = 29400;}
if(time<p1){int ende = 29100;}
int temp1 = ende - time; //endzeit - aktuelle zeit = verbleibende zeit bis zum ende
int temp2 = (temp1/60); // rechnet verbleibende minuten aus
int min2 = (Math.floor(temp2)); //rechnet verbleibende sekunden aus
int sek2 = temp1-(min2*60);     //immernoch

countdown.setString (min2 +":"+ sek2); //senden der Zeit an Form
}
```

Wenn das nun schonmal funktioniert, sollte es ja recht einfach sein dies in einem Form auszugeben... bin mir nur noch nicht sicher, wie ich das machen muss, aber dahin komme ich auch noch... 

Wird eine einfache Ausgabe mit 2 commands werden; einmal exit, und einmal die rechenfunktion erneut ausführen, also zeit aktualisieren... wenn das so funktioniert...

Hat jemand von euch ein Link zu einem Tutorial für ein ähnliches Ausgabe-Programm? das würde mir schon weiterhelfen...

Vielen Dank
Quatermain


----------



## radiac (18. Aug 2009)

Hi


Versuch doch einfach die Systemzeit zu ermitteln mit: 

System.currentTimeMillis();

Es wird dann in milli Sekunden die Zeit vom 1.1.1970 berechnet.

Dann lässt du dir diesen Wert einfach mal über einen String ausgeben.

Wenn ich den Wert hätte, würde ich diesen auf unsere Zeit ausrechnen lassen.
Weil bestimmt eine Zahl von 11957xxxxxxxx ms rauskommen wird.

Wenn du eine Methode fertig hast die dir exact die Stunden, Min, und Sekunden anzeigt. Kannst du dann darauf aufbauend dein Stundentakker bauen .

Kann sein, das es noch einfacher geht. Mir fällt nur die Methode ein. Nenne sie auch nur, weil sie hier soweit ich gelesen habe, nicht angewendet wird.

Gruß Radiac


----------



## Quatermain (20. Aug 2009)

Huhu,
hmmm... hört sich irgendwie komplizierter an :noe:

ich finde es wesentlich einfacher die verstrichenen Sekunden des Tages(seit 0 Uhr) zu zählen und dann daraus alles zu berechnen. Darauf habe ich ja meine Berechnungen bereits aufgebaut und soweit auch fertig programmiert...

nun möchte ich eigentlich nur noch wissen ob dies:

```
int time = calendar.get.SECOND + (calendar.get.MINUTE * 60) + (calendar.get.HOUR_OF_DAY * 3600);
```
mir das herausgibt was ich benötige(die Tageszeit in Sekunden).. und wenn mir dann auch noch jemand bei meinem bereits geposteten Code helfen könnte würde mir das ja auch schon fast ausreichen für mein midlet...

Gruß,
Quatermain


----------



## Quatermain (21. Aug 2009)

Hmmm... ich habe das mittlerweile alles ja schon fertig, jetzt könnte ich nur noch jemanden brauchen, der mir sagt ob es auch funktioniert... und mir eventuell auch sagt was falsch ist, wenn es nicht funktionieren sollte...

ist nicht alzu schwer - denke ich...


```
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import java.util.*;

public class Countdown extends MIDlet implements CommandListener { 

   private Command updateCommand; 
   private Form form; 
   private Display display; 


   public countdown() { 
      display = Display.getDisplay(this); 
      form = new Form("Stundenzähler"); 
      form.append("Zeit bis zum Ende der Stunde..."); 
      exitCommand = new Command("Exit", Command.EXIT, 2); 
      updateCommand=new Command("Show Time",Command.SCREEN,1);  
      form.addCommand(exitCommand); 
      form.addCommand(updateCommand); 
      form.setCommandListener(this); 
      Display.getDisplay(this).setCurrent(form);  
             
   } 

    
   protected void startApp() throws MIDletStateChangeException { 
      display.setCurrent(form); 
      } 

   protected void pauseApp() { } 

   protected void destroyApp(boolean arg0) throws MIDletStateChangeException { } 

	public void commandAction(Command command, Displayable displ) {  

               if (exitCommand.equals(command)) {  //exit commando
                   notifyDestroyed(); }

		else if (updateCommand.equals(command)){  //update kommando
		Calender cal = Calender.getInstance();	    //kalendar initialisieren

		int hour24 = cal.get(Calendar.HOUR_OF_DAY); //stunde ermitteln
		int min    = cal.get(Calendar.MINUTE);	    //minute ermitteln
		int sec    = cal.get(Calendar.SECOND);	    //sekunde ermitteln
		int time   = sec+min*60+hour24*3600;	    //in sekunden umrechnen

		if(time<45900){int ende = 45900;} //überprüfung, welche stunde/pause gerade läuft und setzen der Endzeit
		if(time<43200){int ende = 43200;}
		if(time<42900){int ende = 42900;}
		if(time<40200){int ende = 40200;}
		if(time<39000){int ende = 39000;}
		if(time<36300){int ende = 36300;}
		if(time<36000){int ende = 36000;}
		if(time<33300){int ende = 33300;}
		if(time<32100){int ende = 32100;}
		if(time<29400){int ende = 29400;}
		if(time<29100){int ende = 29100;}
		int temp1 = ende - time; //endzeit - aktuelle zeit = verbleibende zeit bis zum ende
		float temp2 = (temp1/60); // rechnet verbleibende minuten aus
		int min2 = (Math.floor(temp2)); //rechnet verbleibende minuten aus
		int sek2 = temp1-(min2*60);     //immernoch, diesmal sekunden

		stringItem = new StringItem(min2 +":"+ sek2);
		form.append(stringItem);
               }   
	}
}
```


Vielen Dank für eventuelle hilfreichen Antworten,
Quatermain


----------



## Quatermain (24. Aug 2009)

Soo, vielen vielen Dank für die qualifizierte Hilfe und die lebhafte Beteiligung an meinem Problem :roll: ...
Programm funktioniert jetzt trotzdem, wenn auch noch nicht auf meinem LG KE970("midlet could not be instantiated")... aber macht euch blos keine Gedanken darum, das bekomme ich auch noch hin..


Gruß,
Quatermain


----------



## The_S (24. Aug 2009)

Quatermain hat gesagt.:


> aber macht euch blos keine Gedanken darum, das bekomme ich auch noch hin..



Super, dann hierbei noch viel Erfolg  .


----------

