1. #1
    Avatar von UnknownUser
    Registriert seit
    07.05.2014
    Beiträge
    139
    Thanked 227 Times in 73 Posts

    Standard main-Methode und Tread parallel ausführen

    Hey,

    Ich habe mir, um das Thema Threads zu lernen, ein Programm geschrieben, dass bei Drücken der Eingabetaste anfängt sekündlich die aktuelle Zeit auszugeben.
    Wenn ich wieder die Eingabetaste drücke soll es damit aufhören.

    Mein Problem ist jetzt das der Thread damit anfängt die Zeit auszugeben, aber nichtmehr damit aufhört da meine main-Methode nicht weiter ausgeführt wird oder auf mein "t1.interrupt" nicht reagiert. Ich weis es nicht wirklich.

    Daher meine Frage wie kriege ich es hin das ich meine Thread wieder anhalten kann.


    import Prog1Tools.*;
    import java.util.*;

    public class ZeitStoppen {
    public static void main(String[] args) {
    Threads t1 = new Threads();
    //Threads t2 = new Threads();

    IOTools.readLine("Eingabetaste drücken für ersten Thread");
    Date start1 = new Date();
    t1.start(start1, t1);

    /*IOTools.readLine("Eingabetaste drücken für zweiten Thread");
    t2.start();
    Date start2 = new Date();*/

    IOTools.readLine("Eingabetaste drücken zum Anhalten");
    t1.interrupt();
    Date stopp1 = new Date();
    System.out.println(stopp1);

    /*IOTools.readLine("Für Anhalten Eingabetaste drücken");
    t2.interrupt();
    Date stopp2 = new Date();
    System.out.println(stopp2);*/
    }

    public static class Threads extends Thread{
    private Date start1;
    //private Date stopp1;
    private Threads t1;

    public void start(Date start1, Threads t1) {
    this.start1 = start1;
    //this.stopp1 = stopp1;
    this.t1 = t1;
    run();
    }

    public void run() {
    while(t1.isInterrupted() == false) {

    String b = Thread.currentThread().getName();
    System.out.println(""+ b + start1);
    start1 = new Date();

    try {
    sleep(1000);
    }catch (InterruptedException e) {

    }
    //IOTools.readLine("Eingabetaste für Anhalten");
    //t1.interrupt();
    //System.out.println(stopp1);

    }

    }
    }
    }


    Danke schonmal!

    EDIT by DMW007: Beitrag ediert, bitte Sourcecode zukünftig direkt im jeweiligen BB-Code in den Thread posten, z.B. [java] für Java.

  2. #2
    Avatar von Nuebel
    Registriert seit
    23.11.2013
    Beiträge
    446
    Thanked 361 Times in 236 Posts

    Standard AW: main-Methode und Tread parallel ausführen

    Du brauchst zwei Threads.
    Der erste wartet auf Eingaben und der zweite gibt die aktuelle Zeit aus.

    EDIT:

    import java.util.Scanner;
    import java.util.Calendar;

    import java.text.SimpleDateFormat;

    import java.io.PrintWriter;

    public class ThreadsDemo {
    public static void main(String[] args) {
    final Scanner scanner = new Scanner(System.in);
    final Thread timeThread = new Thread(new TimePrinter());

    Thread inputThread = new Thread(new Runnable() {
    @Override
    public void run() {
    while (true) {
    if (scanner.next().equals("a")) {
    timeThread.start();
    } else {
    timeThread.stop(); // evil
    break;
    }
    }
    }
    });

    inputThread.start();
    }
    }

    // Can be used as "normal" class or can be committed to a thread instance
    class TimePrinter implements Runnable {
    public static final PrintWriter defaultOut = new PrintWriter(System.out);
    private static final SimpleDateFormat dateFormatter = new SimpleDateFormat("HH:mm:ss");

    private final long msDelay;

    public TimePrinter() {
    this.msDelay = 1000;
    }

    public TimePrinter(long msDelay) {
    this.msDelay = msDelay;
    }

    @Override
    public void run() {
    while (true) {
    printTime(defaultOut);
    try {
    Thread.sleep(msDelay);
    } catch (InterruptedException ie) {
    ie.printStackTrace();
    }
    }
    }

    public synchronized void printTime(PrintWriter writer) {
    writer.println(dateFormatter.format(Calendar.getInstance().getTime()));
    writer.flush();
    }
    }

    Geändert von Nuebel (09.05.2014 um 17:30 Uhr)

  3. The Following User Says Thank You to Nuebel For This Useful Post:

    UnknownUser (09.05.2014)

Ähnliche Themen

  1. Antworten: 3
    Letzter Beitrag: 17.03.2014, 15:20
  2. C# Methode "im Hintergrund" ausführen
    Von Snees im Forum .Net
    Antworten: 8
    Letzter Beitrag: 08.03.2013, 02:38
  3. Paysafekarte Auscash Methode!
    Von Jack DanieLs im Forum Internet und Technik
    Antworten: 11
    Letzter Beitrag: 07.10.2012, 10:17
  4. .htpasswd Methode
    Von Kuchenmaster im Forum Internet und Technik
    Antworten: 1
    Letzter Beitrag: 15.02.2012, 12:12
  5. Programm verkleinert ausführen?
    Von FranzJoseph im Forum Sonstige
    Antworten: 2
    Letzter Beitrag: 26.01.2012, 01:21
Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.