Swing TimerTask Meeting Kosten

stinson91

Mitglied
Hallo zusammen,

ich will in Java einen Meeting Kosten Rechner programmieren.

Klasse Viewer

Java:
import javax.swing.SwingUtilities;
import java.awt.BorderLayout;
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JTextField;
import java.util.Timer;

public class Viewer extends JFrame
{
	private static final long serialVersionUID = 1L;
	private JPanel jContentPane = null;
	private JButton Start = null;
	private JTextField ausgabe = null;

	private JButton getStart()
	{
		if (Start == null)
		{
			Start = new JButton();
			Start.setText("Start");
			Start.addActionListener(new java.awt.event.ActionListener()
			{
				public void actionPerformed(java.awt.event.ActionEvent e)
				{
					Timer timer = new Timer();
					timer.schedule(new Task(),0,5000);
				}
			});
		}
		return Start;
	}

	private JTextField getAusgabe()
	{
		if (ausgabe == null)
		{
			ausgabe = new JTextField();
		}
		return ausgabe;
	}

	public static void main(String[] args)
	{
		SwingUtilities.invokeLater(new Runnable()
		{
			public void run()
			{
				Viewer thisClass = new Viewer();
				thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
				thisClass.setVisible(true);
			}
		});
	}

	public Viewer()
	{
		super();
		initialize();
	}

	private void initialize()
	{
		this.setSize(300, 200);
		this.setContentPane(getJContentPane());
		this.setTitle("JFrame");
	}

	private JPanel getJContentPane()
	{
		if (jContentPane == null)
		{
			jContentPane = new JPanel();
			jContentPane.setLayout(new BorderLayout());
			jContentPane.add(getStart(), BorderLayout.SOUTH);
			jContentPane.add(getAusgabe(), BorderLayout.CENTER);
		}
		return jContentPane;
	}
}

Klasse Task

Java:
import java.util.TimerTask;
import java.util.Date;
import java.text.SimpleDateFormat;

public class Task extends TimerTask
{
	private double Kosten1;
	private double Kosten2;
	private String Datum;
	private String Test;
	
	public Task()
	{
		this.setKosten1(0);
		this.setKosten2(0);
		this.setDatum(null);
		this.setTest(null);
	}
	
	public Task(double value1,double value2,String value3,String value4)
	{
		this.setKosten1(value1);
		this.setKosten2(value2);
		this.setDatum(value3);
		this.setTest(value4);
	}
	
	public void setKosten1(double kosten1)
	{
		Kosten1 = kosten1;
	}

	public double getKosten1()
	{
		return Kosten1;
	}

	public void setKosten2(double kosten2)
	{
		Kosten2 = kosten2;
	}

	public double getKosten2()
	{
		return Kosten2;
	}

	public void setDatum(String datum)
	{
		Datum = datum;
	}

	public String getDatum()
	{
		return Datum;
	}

	public void setTest(String test)
	{
		Test = test;
	}

	public String getTest()
	{
		return Test;
	}

	public void run()
	{
		Date date = new Date();
		SimpleDateFormat format = new SimpleDateFormat("dd.MM.yyyy hh:mm:ss");
		this.setDatum(format.format(date));
	}
}

So und das Problem ist jetz das im Textfeld alle 5 Sekunden eine Ausgabe der Zeit und der aktuellen Kosten angezeigt werden soll.

Wie kann ich das Textfeld alle 5 Sekunden aktualisieren, so das die Zeit und Kosten ausgegeben werden?

LG Stinson91
 
Zuletzt bearbeitet:

c_sidi90

Top Contributor
Hast du denn überhaupt schon etwas versucht? Du beschreibst was du machen willst, jedoch nicht woran es hapert.

Du musst deinem Task auch sagen, was er alle 5 Sekunden tun soll. Dies erfolgt in der run() Methode. Dadurch das dein TextField "ausgabe" in der Viewer Klasse ist, musst du deiner Taskklasse eine Referenz im Konstruktor für den Viewer mitgeben.

Danach könntest du für dein ausgabe Field einen getter schreiben, auf welchen der Task innerhalb der run() Methode zugreifen kann um mit viewer.getAusgabeField().setText(Datum) das TextField zu aktualisieren.

z.B.
Task.java

Java:
 private Viewer viewer;
    
    public Task(Viewer viewer)
    {
    	this.viewer = viewer;
        this.setKosten1(0);
        this.setKosten2(0);
        this.setDatum(null);
        this.setTest(null);
    }

 public void run()
    {
        Date date = new Date();
        SimpleDateFormat format = new SimpleDateFormat("dd.MM.yyyy hh:mm:ss");
        this.setDatum(format.format(date));
        viewer.getAusgabeField().setText(Datum);
        
    }

Viewer Klasse

Java:
private Task task = new Task(this);

 public JTextField getAusgabeField(){
    	return ausgabe;
    }

Wie deine Berechnung für die Kosten sein sollen kann ich nicht vorhersagen, du musst die Kosten halt wie du es möchtest in der run() Methode addieren an das setText() des ausgabe Felds ranhängen.
Mfg
 
Zuletzt bearbeitet:

stinson91

Mitglied
wenn ich das programm ausführe kommt dann folgendes:

Java:
Exception in thread "Timer-0" java.lang.NullPointerException
	at Task.run(Task.java:86)
	at java.util.TimerThread.mainLoop(Unknown Source)
	at java.util.TimerThread.run(Unknown Source)
 

c_sidi90

Top Contributor
Java:
import javax.swing.SwingUtilities;
import java.awt.BorderLayout;
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JTextField;
import java.util.Timer;
 
public class Viewer extends JFrame
{
    private static final long serialVersionUID = 1L;
    private JPanel jContentPane = null;
    private JButton Start = null;
    private JTextField ausgabe = null;
    private Task task = new Task(this);
    private JButton getStart()
    {
        if (Start == null)
        {
            Start = new JButton();
            Start.setText("Start");
            Start.addActionListener(new java.awt.event.ActionListener()
            {
                public void actionPerformed(java.awt.event.ActionEvent e)
                {
                    Timer timer = new Timer();
                    timer.schedule(task,0,5000);
                }
            });
        }
        return Start;
    }
 
    private JTextField getAusgabe()
    {
        if (ausgabe == null)
        {
            ausgabe = new JTextField();
        }
        return ausgabe;
    }
 
    public static void main(String[] args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            public void run()
            {
                Viewer thisClass = new Viewer();
                thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                thisClass.setVisible(true);
            }
        });
    }
 
    public Viewer()
    {
        super();
        initialize();
    }
 
    private void initialize()
    {
        this.setSize(300, 200);
        this.setContentPane(getJContentPane());
        this.setTitle("JFrame");
    }
 
    private JPanel getJContentPane()
    {
        if (jContentPane == null)
        {
            jContentPane = new JPanel();
            jContentPane.setLayout(new BorderLayout());
            jContentPane.add(getStart(), BorderLayout.SOUTH);
            jContentPane.add(getAusgabe(), BorderLayout.CENTER);
        }
        return jContentPane;
    }
    
    public JTextField getAusgabeField(){
    	return ausgabe;
    }
}

Java:
import java.util.TimerTask;
import java.util.Date;
import java.text.SimpleDateFormat;
 
public class Task extends TimerTask
{
    private double Kosten1;
    private double Kosten2;
    private String Datum;
    private String Test;
    private Viewer viewer;
    
    public Task(Viewer viewer)
    {
    	this.viewer = viewer;
        this.setKosten1(0);
        this.setKosten2(0);
        this.setDatum(null);
        this.setTest(null);
    }
    
    public Task(double value1,double value2,String value3,String value4)
    {
        this.setKosten1(value1);
        this.setKosten2(value2);
        this.setDatum(value3);
        this.setTest(value4);
    }
    
    public void setKosten1(double kosten1)
    {
        Kosten1 = kosten1;
    }
 
    public double getKosten1()
    {
        return Kosten1;
    }
 
    public void setKosten2(double kosten2)
    {
        Kosten2 = kosten2;
    }
 
    public double getKosten2()
    {
        return Kosten2;
    }
 
    public void setDatum(String datum)
    {
        Datum = datum;
    }
 
    public String getDatum()
    {
        return Datum;
    }
 
    public void setTest(String test)
    {
        Test = test;
    }
 
    public String getTest()
    {
        return Test;
    }
 
    public void run()
    {
        Date date = new Date();
        SimpleDateFormat format = new SimpleDateFormat("dd.MM.yyyy hh:mm:ss");
        this.setDatum(format.format(date));
        viewer.getAusgabeField().setText(Datum);
        
    }
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Timer, TimerTask und Warten AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben