G
GimmeGimme09
Gast
Hi, ich als Anfänger tue mich recht schwer damit 2 StoppUhren die parallel laufen müssen zu programmieren. Nach einigen stunden
ist mir dann immerhin etwas gelungen^^. Jetzt fallen mir aber schon 2 probleme auf.
1. die uhr ist ungenau. die dauer zwischen start und stop geht um 1 sek nach.
2. ich kann, wenn ich einmal a oder b gestartet und gestoppt habe, nicht nochmal a oder halt b starten ( ist mir schon klar warum^^ ist müsste ja jetzt den thread neu erzeugen oder verhindern das run() beendet wird) nur weiß ich nicht wie ich das in meinem code machen soll.
Wenn ihr noch mehr fehler sehen solltet immer raus damit, das würde mir sehr helfen
und nochmal eine der Uhren A und B. Die andere sieht genau so aus.
ist mir dann immerhin etwas gelungen^^. Jetzt fallen mir aber schon 2 probleme auf.
1. die uhr ist ungenau. die dauer zwischen start und stop geht um 1 sek nach.
2. ich kann, wenn ich einmal a oder b gestartet und gestoppt habe, nicht nochmal a oder halt b starten ( ist mir schon klar warum^^ ist müsste ja jetzt den thread neu erzeugen oder verhindern das run() beendet wird) nur weiß ich nicht wie ich das in meinem code machen soll.
Wenn ihr noch mehr fehler sehen solltet immer raus damit, das würde mir sehr helfen
Java:
import java.text.DateFormat;
import java.text.SimpleDateFormat;
//import java.util.Date;
import java.util.*;
public class Stoppuhr {
public static void main(String[] args) throws InterruptedException {
UhrA a = new UhrA();
UhrB b = new UhrB();
Scanner sc = new Scanner(System.in);
do {
System.out.print("Eingabe: ");
String e1 = sc.next();
if (e1.equals("A") | e1.equals("a")) {
//System.out.println("WEgpunkt2");
if (a.isAlive() == true) {
a.interrupt();
Date d4 = new Date(System.currentTimeMillis());
DateFormat df = SimpleDateFormat.getTimeInstance(DateFormat.MEDIUM);
System.out.println("Es ist " + df.format(d4) + " Uhr.");
} else {
try {
a.start();
Date d = new Date(System.currentTimeMillis());
DateFormat df = SimpleDateFormat.getTimeInstance(DateFormat.MEDIUM);
System.out.println("Es ist " + df.format(d) + " Uhr.");
} catch (IllegalThreadStateException e) {
System.out.println("Nochmal die Uhr starten geht nicht");
}
}
} else if (e1.equals("B") | e1.equals("b")) {
// System.out.println("WEgpunkt3");
if (b.isAlive() == true) {
b.interrupt();
Date d3 = new Date(System.currentTimeMillis());
DateFormat df = SimpleDateFormat.getTimeInstance(DateFormat.MEDIUM);
System.out.println("Es ist " + df.format(d3) + " Uhr.");
} else {
try {
b.start();
Date d2 = new Date(System.currentTimeMillis());
DateFormat df = SimpleDateFormat.getTimeInstance(DateFormat.MEDIUM);
System.out.println("Es ist " + df.format(d2) + " Uhr.");
} catch (IllegalThreadStateException e) {
System.out.println("Nochmal die Uhr starten geht nicht");
}
}
}
else {
System.out.println("Ungültige StoppUhr: Bitte nur A oder B");
}
Thread.sleep(1);
} while (a.isAlive() || b.isAlive());
}
}
und nochmal eine der Uhren A und B. Die andere sieht genau so aus.
Java:
public class UhrA extends Thread {
long millis;
//long StartZeit, StoppZeit;
@Override
public void run() {
millis = System.currentTimeMillis();
while (true) {
if (isInterrupted()) {
millis = System.currentTimeMillis() - millis;
millis = (millis/1000);
//Date d4 = new Date(millis);
System.out.println("Dauer: "+millis+" Sekunden");
break;
}
}
}