Stunden/Tage Countdown

Scar3

Mitglied
Java:
[/B]
package Countdown;
import java.sql.Time;
import javax.swing.*;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
import java.util.Timer;
import java.util.TimerTask;
import java.time.format.DateTimeFormatter; 
import java.time.LocalDateTime;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.lang.module.ModuleDescriptor.Opens;
public class Countdown extends Frame implements MouseListener {
        public static void main(String[] args) {   
       
        long days;

            Scanner in = new Scanner(System.in);

            System.out.println("Please enter fasting days:");
            days = in.nextInt();

            long hours = days * 24;

            System.out.println(hours + " h");
            Time time = new Time(hours);
            System.out.println("Hours remaining:");
            System.out.println(hours);
            DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss"); 
               LocalDateTime now = LocalDateTime.now(); 
               System.out.println(dtf.format(now)); 
              
    }
 

Das war der Anfang, der funktioniert, aber jetzt bekomme ich es nicht hin, dass es in Intervallen ausgibt, wieviele Stunden noch übring sind / oder wie viele Stunden von dem Wert (hours) schon vergangen sind. Sorry für die blöde Frage, aber ich finde einfach nichts dazu.
 
Ok du hast einem Timer Objekt erstellt.
Inizalisiren und starten tust du ihm nicht.
Dein Timer läuft garnich.

Edit
Ok du hast gar keinen Timer nur ein Time Objekt.
 
Zuletzt bearbeitet:
Ok du hast einem Timer Objekt erstellt.
Inizalisiren und starten tust du ihm nicht.
Dein Timer läuft garnich.

Edit
Ok du hast gar keinen Timer nur ein Time Objekt.
Ja, ich verstehe nicht wie ich einen Timer starten kann. mit public void run() funktioniert es nicht. Da steht dann immer "record was expected". Einen Timer kann ich ja so erstellen Timer timer = new Timer(); oder?
 
Google hilft.

Nur wirst du damit nicht dein Ziel einer Status Ausgabe. Schaue dir später andere Beispiele an.
 
Für einen contown der die min oder sec ständig actulisirt soltest du dich mit thread beschäftigen.

Denn ein klassischer Timer gibt dir keine Status Info. Hat kein progres.
Also selber machen mit Threads würde ich sagen.
 
Java:
[/B]
package Countdown;

import java.awt.Color;
import java.awt.FlowLayout;
import java.sql.Time;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Scanner;

import javax.swing.JFrame;
import javax.swing.JProgressBar;
import javax.swing.WindowConstants;

public class MyFrame extends JFrame{
JProgressBar jpb;

public MyFrame(){
setLayout(new FlowLayout());
setSize(400,400);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
jpb=new JProgressBar(JProgressBar.HORIZONTAL,0, 100);
//jpb=new JProgressBar(); is enough.
//In that case, Default values for parameters are same as above
jpb.setForeground(Color.RED);//set foreground color of progressbar
jpb.setStringPainted(true);//to show a string on jpb (by default it is percent)
jpb.setBackground(Color.BLACK);//set background color of progressbar
add(jpb);
ProgressUpdate.start();//starting the timer thread
}

public static void main(String args[])
{
new MyFrame().setVisible(true);
}
//creating a Thread (for timer) within the MyFrame class
Thread ProgressUpdate=new Thread()
{
public void run()
{
    long days;

    Scanner in = new Scanner(System.in);

    System.out.println("Please enter fasting days:");
    days = in.nextInt();

    long hours = days * 24;

    System.out.println(hours + " h");
    Time time = new Time(hours);
    DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");  
       LocalDateTime now = LocalDateTime.now();  
       System.out.println(dtf.format(now));
    System.out.println("Please enter Start Time:");
    long starttd;
    starttd = in.nextInt();
    long predict = starttd + hours;
    long remaining2 = predict - starttd;
    System.out.println("Hours remaining:" + remaining2);
    System.out.println(hours);
    
}
};[/B]
 [B]}
[B]


Das habe ich jetzt so, dann kommt dieser Fehler:
Please enter Start Time:
12:52
Exception in thread "Thread-0" java.util.InputMismatchException
at java.base/java.util.Scanner.throwFor(Scanner.java:943)
at java.base/java.util.Scanner.next(Scanner.java:1598)
at java.base/java.util.Scanner.nextInt(Scanner.java:2263)
at java.base/java.util.Scanner.nextInt(Scanner.java:2217)
at Countdown.MyFrame$1.run(FastingCountdown.java:56)

Und kann jemand mir etwas empfehlen, wo ich alles über Java lernen kann, weil ich will euch hier nicht dauernd nerven mit meinen Anfänger Fragen...
 
Hallo was soll im Thread (Run Methode ) der Scanner die Eingabe?
Die wurde somit immer wider wiederholt zweitens sollte man einen Scanner wenn er nicht mehr gebraucht wird wider schlissen.
Die Eingabe vom User muss außerhalb vom Thread sein.

Hier ein einfaches Beispiel mit Ausgabe der sek auf die Konsole. Es wird von 60 sek runter gezählt.
Java:
public class Main {
   
    int time;
   
    public static void main(String[] args) {
   
        Main main = new Main();
       
        main.time = 60; //1 min=60 seconds
        main.ProgressUpdate.start();
    }
   
    Thread ProgressUpdate = new Thread()    {
       
        public void run(){
            for(int i= time ; i>0; i--)  {
                try {
                        Thread.sleep(1000);  //Thread sleep for 1 sec
                        System.out.println(i);
                 } catch (Exception ex) {}
                   
            }
        }
    };
   
}
 
Java:
[/B]
package Countdown;

import java.awt.Color;
import java.awt.FlowLayout;
import java.sql.Time;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Scanner;

import javax.swing.JFrame;
import javax.swing.JProgressBar;
import javax.swing.WindowConstants;

public class MyFrame extends JFrame{
JProgressBar jpb;

public MyFrame(){
setLayout(new FlowLayout());
setSize(400,400);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
jpb=new JProgressBar(JProgressBar.HORIZONTAL,0, 100);
//jpb=new JProgressBar(); is enough.
//In that case, Default values for parameters are same as above
jpb.setForeground(Color.RED);//set foreground color of progressbar
jpb.setStringPainted(true);//to show a string on jpb (by default it is percent)
jpb.setBackground(Color.BLACK);//set background color of progressbar
add(jpb);
ProgressUpdate.start();//starting the timer thread
}

public static void main(String args[])
{
new MyFrame().setVisible(true);
}
//creating a Thread (for timer) within the MyFrame class
Thread ProgressUpdate=new Thread()
{
public void run()
{
    long days;

    Scanner in = new Scanner(System.in);

    System.out.println("Please enter fasting days:");
    days = in.nextInt();

    long hours = days * 24;

    System.out.println(hours + " h");
    Time time = new Time(hours);
    DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");  
       LocalDateTime now = LocalDateTime.now();  
       System.out.println(dtf.format(now));
    System.out.println("Please enter Start Time:");
    long starttd;
    starttd = in.nextInt();
    long predict = starttd + hours;
    long remaining2 = predict - starttd;
    System.out.println("Hours remaining:" + remaining2);
    System.out.println(hours);
    
}
};[/B][/B][/B]
 [B][B][B]}
[B]


Das habe ich jetzt so, dann kommt dieser Fehler:
Please enter Start Time:
12:52
Exception in thread "Thread-0" java.util.InputMismatchException
at java.base/java.util.Scanner.throwFor(Scanner.java:943)
at java.base/java.util.Scanner.next(Scanner.java:1598)
at java.base/java.util.Scanner.nextInt(Scanner.java:2263)
at java.base/java.util.Scanner.nextInt(Scanner.java:2217)
at Countdown.MyFrame$1.run(FastingCountdown.java:56)

Und kann jemand mir etwas empfehlen, wo ich alles über Java lernen kann, weil ich will euch hier nicht dauernd nerven mit meinen Anfänger Fragen...

Das Einlesen muss VOR dem Starten des Threads/Timers passieren.
 

Zurück
Oben