Stop / Start (Fortsetzen) von java.util.Timer

Thomas 81

Grünschnabel
Hallo,

ich möchte eine Timer Instanz anhalten und anschliessend wieder fortsetzen über jButtons's.
Ich hab leider grad keine andere Idee.
Wenn ich die Timer Instanz mit chancel() beende bekomme ich bei erneuten "Senden" drücken eine Fehlermeldung da die Instanz nichtmehr existiert.

Erstelle ich Timer myTimer = new Timer(); im jButton("Senden") weiss jButton1("Stop") nichts von dessen existenz. :confused:

So das zwar sehr schlecht erklärt jedoch hoffe ich man kann mir hier helfen :(
Wenn ihr mehr Informationen braucht oder mein Problem zu schlecht beschrieben ist sagts mir Bitte :)


Auszug der Initialisierung
Code:
	private TimerJob myTimerJob = new TimerJob ();
	private Timer myTimer = new Timer();

Code:
	private JButton getJButton() {
		if (jButton == null) {
			jButton = new JButton();
			jButton.setBounds(new Rectangle(15, 15, 106, 31));
			jButton.setText("Senden");
			jButton.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					
					
					myTimer.schedule(myTimerJob, 1000, 30000);
					
					
					if ( jRadioButton6.isSelected() == true )
					{
						myTimerJob.setEingabe(jTextField.getText());						
					}
					
					if ( jRadioButton3.isSelected() == true )
					{
						myTimerJob.setEingabe(jRadioButton3.getText());						
					}
					
					if ( jRadioButton4.isSelected() == true )
					{
						myTimerJob.setEingabe(jRadioButton4.getText());						
					}
					
					if ( jRadioButton5.isSelected() == true )
					{
						myTimerJob.setEingabe(jRadioButton5.getText());						
					}
					
					if ( jRadioButton7.isSelected() == true )
					{
						myTimerJob.setEingabe(jRadioButton7.getText());						
					}
					
				
					myTimerJob.setIP(jTextField1.getText());
					myTimerJob.setPort(jTextField2.getText());
					
					myTimerJob.isBlinken(jRadioButton1.isSelected());
					myTimerJob.isLaufschrift(jRadioButton.isSelected());
					
					myTimerJob.setStatus(true);
					
				
//					Hier Threat für jTextArea
					Runnable runnable = new Runnable()
					{
					    public void run()
					    {
					    	Status = true;
					    	while (Status == true)
					    	{
					    		try { Thread.sleep(1000); }
					    		catch (InterruptedException ex) {}
					    		
					    		jTextArea.setText(myTimerJob.getStatus_meldung());
								jTextArea.paint(jTextArea.getGraphics());
					    		
								Status = myTimerJob.getStatus();					
												    		
					    		//status = false;
					    	}
					    }
					};

					Thread thread = new Thread(runnable);
				    thread.start();
					// Ende Threat für jTextArea

			}});
		}
		return jButton;
	}


/**
	 * This method initializes jButton1	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getJButton1() {
		if (jButton1 == null) {
			jButton1 = new JButton();
			jButton1.setBounds(new Rectangle(150, 15, 106, 31));
			jButton1.setText("Stop");
			jButton1.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					
					
					myTimer.cancel();
					
					myTimerJob.setStatus_meldung("Gestartet... \n");
					
				
					
				}
			});
		}
		return jButton1;
	}
 
Moin,

Du wirst ihn notgedrungen an die jeweiligen Klassen übergeben müssen, damit er bekannt wird ... es sei denn, er ist im Main global definiert, was ich nicht hoffe ;-)

Ich nutze hier übrigens den javax.swing.Timer !
Der ist irgendwie eleganter wie ich finde!

Was macht denn Dein "TimerJob"?

Gruß
Klaus

PS1: Willkommen bei Tutorials.de :)
PS2: Dein TimerJob dürfte doch bei "getButton" genauso wenig bekannt sein, oder Wo genau erstellst Du die beiden Objekte denn ?
 
Zuletzt bearbeitet:
Danke vfl_freak das Du dir schonmal die mühe machst meinem Problem zu folgen. :)

Ich Poste mal lieber das ganze Projekt.
Es ist ein teil meiner Technikerarbeit.
Richtig und Strukturiert Programmieren kann ich leider nicht, also nicht erschrecken (!)
Wobei ich schon viele Ideen und Ansätze bei Problemen hier im Forum gefunden hab :rolleyes:

Das ganze Programm steuert eine LED Matrix-Anzeige über ein WLAN Modul (WLAN-Modul + Fachklasse betreut mein ProjektPartner).
Mein Problem ist, das diese Anzeige mind. alle 3 Minuten ein Datentelegramm also das was Sie Anzeigen soll benötigt.
Wenn ich jetzt "Senden" drücke geht alles gut. Möchte ich die Übertragungen abbrechen mit "Stop" knallts in der Konsole da die Timer Instanz "myTimer" ge' chancelt() wurde. Ich weiss grad nich so Recht wo ich die sonst erstellen soll ? die Timer Instanz.
Wenn ich die Timer Instanz mit chancel() beende, müsste ich eine neue erstellen mit "Senden"... von der weiss allerdings der "Stop" jButton1 nichts

javax.swing.Timer
hatte ich zuvor ausprobiert Funktionierte SUPER ... bis auf das sobald er in die actionPerformed() methode eintritt die Gui einfrohr bis die actionPerformed() beendet war !! Und da ich da keine Lösung für fand... nahm ich mal den java.util.Timer .. welcher mir die Gui nich einfriert.

Hilft das was ?


class Start
Code:
package version_1;

public class Start
{	
	public static void main (String [] args)
	{			
		Gui myGui = new Gui();		
		myGui.setVisible(true);				
	} 
}

/*
  
Die Klasse Start enthält die "main" methode welche eine Instanz der Gui klasse erzeugt und diese sichtbar macht.
Wir erzeugen hier sozusagen die Grafische oberfläche.
*/


class Gui
Code:
package version_1;



import javax.swing.JPanel;
import javax.swing.JFrame;
//import javax.swing.Timer;
//import java.util.TimerTask;
import java.util.Timer;


import java.awt.Rectangle;
import javax.swing.BorderFactory;
import javax.swing.border.TitledBorder;
import javax.swing.*;


import java.awt.Color;
import java.awt.Font;
import javax.swing.JTextArea;
import java.awt.event.KeyEvent;
import javax.swing.JRadioButton;




public class Gui extends JFrame {

	private static final long serialVersionUID = 1L;
	private JPanel jContentPane = null;
	private JPanel jPanel = null;
	private JPanel jPanel2 = null;
	private JPanel jPanel3 = null;
	private JButton jButton = null;
	private JButton jButton1 = null;
	private JButton jButton2 = null;
	private JButton jButton3 = null;
	private JPanel jPanel4 = null;
	private JRadioButton jRadioButton = null;
	private JRadioButton jRadioButton1 = null;
	private JRadioButton jRadioButton3 = null;
	private JRadioButton jRadioButton4 = null;
	private JRadioButton jRadioButton5 = null;
	private JTextField jTextField = null;
	private JPanel jPanel5 = null;
	private JTextField jTextField1 = null;
	private JLabel jLabel = null;
	private JLabel Port = null;
	private JLabel jLabel1 = null;
	private JTextField jTextField2 = null;
	private JTextArea jTextArea = null;
	private JRadioButton jRadioButton2 = null;
	private JRadioButton jRadioButton6 = null;
	private JRadioButton jRadioButton7 = null;
	
	private boolean Status = true;

	private TimerJob myTimerJob = new TimerJob ();
	private Timer myTimer = new Timer();
	
	/**
	 * This is the default constructor
	 */	
	public Gui() {
		super();
		
				try { 		
			
			//UIManager.setLookAndFeel("com.sun.java.swing.plaf.gtk.GTKLookAndFeel");		
			//UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");		
			//UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
			UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
			
			//SwingUtilities.updateComponentTreeUI(jContentPane);
			} catch( Exception e ) { e.printStackTrace(); }
			
		initialize();
	}

	/**
	 * This method initializes this
	 
	 * @return void
	 */
	private void initialize() {
		this.setSize(653, 663);
		this.setForeground(Color.black);
		this.setContentPane(getJContentPane());
		this.setTitle("JFrame");			
	}

	/**
	 * This method initializes jContentPane
	 * 
	 * @return javax.swing.JPanel
	 */
	private JPanel getJContentPane() {
		if (jContentPane == null) {
			jContentPane = new JPanel();
			jContentPane.setLayout(null);
			jContentPane.add(getJPanel(), null);
			jContentPane.add(getJPanel2(), null);
			jContentPane.add(getJPanel3(), null);
			jContentPane.add(getJPanel4(), null);
			jContentPane.add(getJPanel5(), null);
			
			
		}
		return jContentPane;
	}

	/**
	 * This method initializes jPanel	
	 * 	
	 * @return javax.swing.JPanel	
	 */
	private JPanel getJPanel() {
		if (jPanel == null) {
			jPanel = new JPanel();
			jPanel.setLayout(null);
			jPanel.setBounds(new Rectangle(15, 15, 271, 242));
			jPanel.setBorder(BorderFactory.createTitledBorder(null, "Nachricht", TitledBorder.DEFAULT_JUSTIFICATION, TitledBorder.DEFAULT_POSITION, new Font("Tahoma", Font.BOLD, 12), new Color(51, 51, 51)));
			jPanel.add(getJTextField(), null);
			jPanel.add(getJRadioButton6(), null);
			jPanel.add(getJRadioButton3(), null);
			jPanel.add(getJRadioButton4(), null);
			jPanel.add(getJRadioButton5(), null);
			jPanel.add(getJRadioButton7(), null);
			
			
			jRadioButton6.setSelected( true );
			
			ButtonGroup h = new ButtonGroup();
			
			h.add( jRadioButton3 );
			h.add( jRadioButton4 );
			h.add( jRadioButton5 );
			h.add( jRadioButton6 );
			h.add( jRadioButton7 );
			
		}
		return jPanel;
	}

	

	/**
	 * This method initializes jPanel2	
	 * 	
	 * @return javax.swing.JPanel	
	 */
	private JPanel getJPanel2() {
		if (jPanel2 == null) {
			TitledBorder titledBorder = BorderFactory.createTitledBorder(null, "Effekte", TitledBorder.DEFAULT_JUSTIFICATION, TitledBorder.DEFAULT_POSITION, new Font("Tahoma", Font.BOLD, 12), new Color(51, 51, 51));
			titledBorder.setBorder(null);
			jPanel2 = new JPanel();
			jPanel2.setLayout(null);
			jPanel2.setBounds(new Rectangle(330, 135, 271, 121));
			jPanel2.setBorder(titledBorder);
			jPanel2.add(getJRadioButton(), null);
			jPanel2.add(getJRadioButton1(), null);
			jPanel2.add(getJRadioButton2(), null);
			
			jRadioButton2.setSelected( true );

			ButtonGroup g = new ButtonGroup();
			
			g.add( jRadioButton );
			g.add( jRadioButton1 );
			g.add( jRadioButton2 );
			

		}
		return jPanel2;
	}

	/**
	 * This method initializes jPanel3	
	 * 	
	 * @return javax.swing.JPanel	
	 */
	private JPanel getJPanel3() {
		if (jPanel3 == null) {
			jPanel3 = new JPanel();
			jPanel3.setLayout(null);
			jPanel3.setBounds(new Rectangle(15, 285, 586, 61));
			jPanel3.add(getJButton(), null);
			jPanel3.add(getJButton1(), null);
			jPanel3.add(getJButton2(), null);
			jPanel3.add(getJButton3(), null);
		}
		return jPanel3;
	}

	
	/**
	 * This method initializes jButton	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getJButton() {
		if (jButton == null) {
			jButton = new JButton();
			jButton.setBounds(new Rectangle(15, 15, 106, 31));
			jButton.setText("Senden");
			jButton.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					
					
					myTimer.schedule(myTimerJob, 1000, 30000);
					
					
					if ( jRadioButton6.isSelected() == true )
					{
						myTimerJob.setEingabe(jTextField.getText());						
					}
					
					if ( jRadioButton3.isSelected() == true )
					{
						myTimerJob.setEingabe(jRadioButton3.getText());						
					}
					
					if ( jRadioButton4.isSelected() == true )
					{
						myTimerJob.setEingabe(jRadioButton4.getText());						
					}
					
					if ( jRadioButton5.isSelected() == true )
					{
						myTimerJob.setEingabe(jRadioButton5.getText());						
					}
					
					if ( jRadioButton7.isSelected() == true )
					{
						myTimerJob.setEingabe(jRadioButton7.getText());						
					}
					
				
					myTimerJob.setIP(jTextField1.getText());
					myTimerJob.setPort(jTextField2.getText());
					
					myTimerJob.isBlinken(jRadioButton1.isSelected());
					myTimerJob.isLaufschrift(jRadioButton.isSelected());
					
					myTimerJob.setStatus(true);
					
				
//					Hier Threat für jTextArea
					Runnable runnable = new Runnable()
					{
					    public void run()
					    {
					    	Status = true;
					    	while (Status == true)
					    	{
					    		try { Thread.sleep(1000); }
					    		catch (InterruptedException ex) {}
					    		
					    		jTextArea.setText(myTimerJob.getStatus_meldung());
								jTextArea.paint(jTextArea.getGraphics());
					    		
								Status = myTimerJob.getStatus();					
												    		
					    		//status = false;
					    	}
					    }
					};

					Thread thread = new Thread(runnable);
				    thread.start();
					// Ende Threat für jTextArea

			}});
		}
		return jButton;
	}

	/**
	 * This method initializes jButton1	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getJButton1() {
		if (jButton1 == null) {
			jButton1 = new JButton();
			jButton1.setBounds(new Rectangle(150, 15, 106, 31));
			jButton1.setText("Stop");
			jButton1.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					
					
					myTimer.cancel();
					
					myTimerJob.setStatus_meldung("Gestartet... \n");
					
				
					
				}
			});
		}
		return jButton1;
	}

	/**
	 * This method initializes jButton2	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getJButton2() {
		if (jButton2 == null) {
			jButton2 = new JButton();
			jButton2.setBounds(new Rectangle(465, 15, 109, 31));
			jButton2.setText("GUI Reset");
			jButton2.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					
				}
			});
		}
		return jButton2;
	}

	/**
	 * This method initializes jButton3	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getJButton3() {
		if (jButton3 == null) {
			jButton3 = new JButton();
			jButton3.setBounds(new Rectangle(330, 15, 106, 31));
			jButton3.setText("Beenden");
			jButton3.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					
					System.exit(0);
				}
			});
		}
		return jButton3;
	}

	/**
	 * This method initializes jPanel4	
	 * 	
	 * @return javax.swing.JPanel	
	 */
	private JPanel getJPanel4() {
		if (jPanel4 == null) {
			jPanel4 = new JPanel();
			jPanel4.setLayout(null);
			jPanel4.setBounds(new Rectangle(15, 390, 586, 211));
			jPanel4.setBorder(BorderFactory.createTitledBorder(null, "Status Meldungen", TitledBorder.DEFAULT_JUSTIFICATION, TitledBorder.DEFAULT_POSITION, new Font("Tahoma", Font.BOLD, 12), new Color(51, 51, 51)));
			jPanel4.add(getJTextArea(), null);
		}
		return jPanel4;
	}

	/**
	 * This method initializes jRadioButton	
	 * 	
	 * @return javax.swing.JRadioButton	
	 */
	private JRadioButton getJRadioButton() {
		if (jRadioButton == null) {
			jRadioButton = new JRadioButton();
			jRadioButton.setBounds(new Rectangle(15, 30, 91, 21));
			jRadioButton.setName("");
			jRadioButton.setMnemonic(KeyEvent.VK_UNDEFINED);
			jRadioButton.setText("Laufschrift");
		}
		return jRadioButton;
	}

	/**
	 * This method initializes jRadioButton1	
	 * 	
	 * @return javax.swing.JRadioButton	
	 */
	private JRadioButton getJRadioButton1() {
		if (jRadioButton1 == null) {
			jRadioButton1 = new JRadioButton();
			jRadioButton1.setBounds(new Rectangle(15, 60, 91, 21));
			jRadioButton1.setText("Blinken");
		}
		return jRadioButton1;
	}

	/**
	 * This method initializes jRadioButton2	
	 * 	
	 * @return javax.swing.JRadioButton	
	 */
	private JRadioButton getJRadioButton2() {
		if (jRadioButton2 == null) {
			jRadioButton2 = new JRadioButton();
			jRadioButton2.setBounds(new Rectangle(15, 90, 106, 21));
			jRadioButton2.setText("Statisch");
		}
		return jRadioButton2;
	}
	
	
	/**
	 * This method initializes jRadioButton3	
	 * 	
	 * @return javax.swing.JRadioButton	
	 */
	private JRadioButton getJRadioButton3() {
		if (jRadioButton3 == null) {
			jRadioButton3 = new JRadioButton();
			jRadioButton3.setText("Countryfest 30. März 2090 12:30 Mittagsbuffet für 5 Euro --- all you can eat im Bau B");
			jRadioButton3.setBounds(new Rectangle(30, 90, 241, 21));
		}
		return jRadioButton3;
	}

	/**
	 * This method initializes jRadioButton4	
	 * 	
	 * @return javax.swing.JRadioButton	
	 */
	private JRadioButton getJRadioButton4() {
		if (jRadioButton4 == null) {
			jRadioButton4 = new JRadioButton();
			jRadioButton4.setText("Schulunterricht fällt aus !");
			jRadioButton4.setBounds(new Rectangle(30, 120, 241, 21));
		}
		return jRadioButton4;
	}

	/**
	 * This method initializes jRadioButton5	
	 * 	
	 * @return javax.swing.JRadioButton	
	 */
	private JRadioButton getJRadioButton5() {
		if (jRadioButton5 == null) {
			jRadioButton5 = new JRadioButton();
			jRadioButton5.setText("FTE 07 / 09 Rockt ! ;)");
			jRadioButton5.setBounds(new Rectangle(30, 150, 241, 21));
		}
		return jRadioButton5;
	}

	/**
	 * This method initializes jTextField	
	 * 	
	 * @return javax.swing.JTextField	
	 */
	private JTextField getJTextField() {
		if (jTextField == null) {
			jTextField = new JTextField();
			jTextField.setBounds(new Rectangle(60, 30, 196, 31));
			jTextField.setFont(new Font("Tahoma", Font.PLAIN, 14));
			jTextField.setText("Gewerbeschule Lörrach -- http://www.gws-loerrach.de");
		}
		return jTextField;
	}

	/**
	 * This method initializes jPanel5	
	 * 	
	 * @return javax.swing.JPanel	
	 */
	private JPanel getJPanel5() {
		if (jPanel5 == null) {
			jLabel1 = new JLabel();
			jLabel1.setBounds(new Rectangle(30, 60, 38, 16));
			jLabel1.setText("Port");
			Port = new JLabel();
			Port.setBounds(new Rectangle(42, 66, 0, 0));
			Port.setText("JLabel");
			jLabel = new JLabel();
			jLabel.setBounds(new Rectangle(30, 30, 49, 16));
			jLabel.setText("IP WLAN");
			jPanel5 = new JPanel();
			jPanel5.setLayout(null);
			jPanel5.setBounds(new Rectangle(330, 15, 271, 91));
			jPanel5.setBorder(BorderFactory.createTitledBorder(null, "TCP / IP Einstellungen", TitledBorder.DEFAULT_JUSTIFICATION, TitledBorder.DEFAULT_POSITION, new Font("Tahoma", Font.BOLD, 12), new Color(51, 51, 51)));
			jPanel5.add(getJTextField1(), null);
			jPanel5.add(jLabel, null);
			jPanel5.add(Port, null);
			jPanel5.add(jLabel1, null);
			jPanel5.add(getJTextField2(), null);
		}
		return jPanel5;
	}

	/**
	 * This method initializes jTextField1	
	 * 	
	 * @return javax.swing.JTextField	
	 */
	private JTextField getJTextField1() {
		if (jTextField1 == null) {
			jTextField1 = new JTextField();
			jTextField1.setBounds(new Rectangle(88, 27, 108, 27));
			jTextField1.setText("192.168.100.10");
		}
		return jTextField1;
	}

	/**
	 * This method initializes jTextField2	
	 * 	
	 * @return javax.swing.JTextField	
	 */
	private JTextField getJTextField2() {
		if (jTextField2 == null) {
			jTextField2 = new JTextField();
			jTextField2.setBounds(new Rectangle(89, 59, 27, 24));
			jTextField2.setText("23");
		}
		return jTextField2;
	}

	/**
	 * This method initializes jTextArea	
	 * 	
	 * @return javax.swing.JTextArea	
	 */
	private JTextArea getJTextArea() {
		if (jTextArea == null) {
			jTextArea = new JTextArea();
			jTextArea.setBounds(new Rectangle(30, 30, 526, 151));
			jTextArea.setVisible(true);
			/*
			jTextArea.append(myTime.getstatus_meldung1());
			jTextArea.append(myTime.getstatus_meldung2());
			jTextArea.append(myTime.getstatus_meldung3());
			jTextArea.append(myTime.getstatus_meldung4());
			jTextArea.paint(jTextArea.getGraphics());
			*/
		}
		return jTextArea;
	}

	/**
	 * This method initializes jRadioButton6	
	 * 	
	 * @return javax.swing.JRadioButton	
	 */
	private JRadioButton getJRadioButton6() {
		if (jRadioButton6 == null) {
			jRadioButton6 = new JRadioButton();
			jRadioButton6.setBounds(new Rectangle(30, 30, 21, 21));
		}
		return jRadioButton6;
	}

	/**
	 * This method initializes jRadioButton7	
	 * 	
	 * @return javax.swing.JRadioButton	
	 */
	private JRadioButton getJRadioButton7() {
		if (jRadioButton7 == null) {
			jRadioButton7 = new JRadioButton();
			jRadioButton7.setBounds(new Rectangle(30, 180, 241, 21));
			jRadioButton7.setText("Anzeige Defekt !!");
		}
		return jRadioButton7;
	}

	

}  //  @jve:decl-index=0:visual-constraint="40,4"


class TimerJob
Code:
package version_1;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date;
import java.util.TimerTask;

public class TimerJob extends TimerTask
{		
	
//	Initialisierung
	private int eingabeHexWert = 0;
	
	private String ausgabe_hex = null;
	private String HEX_an_Anzeige = null;

	
	//Setter Variablen
	private int intPort = 0;
	private int i = 1;
	
	private String eingabe = null;
	private String IP = null;
	private String Port = null;
	
	private Boolean Blinken = false;
	private Boolean Laufschrift = false;
	
	
	private String status_meldung = "Gestartet... \n";
	//Getter Variablen
	
	private boolean Status = true;
	
	//Initialisierung von Instanzen
	
	

	
	
	//Setter Methoden
	void setEingabe(String Eingabe)
	{
		this.eingabe = Eingabe;
	}
	
	void setIP(String IP)
	{
		this.IP = IP;
	}
	
	void setPort(String Port)
	{
		this.Port = Port;
	}
	
	void isBlinken(Boolean Blinken)
	{
		this.Blinken = Blinken;
	}
	
	void isLaufschrift(Boolean Laufschrift)
	{
		this.Laufschrift = Laufschrift;
	}
	
	void setStatus_meldung(String newstatus_meldung)
	{
		this.status_meldung = newstatus_meldung;
	}
	
	void setStatus(Boolean newstatus)
	{
		this.Status = newstatus;
	}
	
	Boolean getStatus()
	{
		return Status;
	}
	
	String getStatus_meldung()
	{
		return status_meldung;
	}
	
	
	
	Wlancom WlancomInstanz = new Wlancom ();
	
  

@Override
public void run()
{
	// TODO Automatisch erstellter Methoden-Stub
	StringBuffer myStringBuffer = new StringBuffer();	 
	DataTelegram myString_append = new DataTelegram ();
	Date myDate = new Date();
	 

		System.out.println("Eintritt in Timer methode run()");
		
		
		
		status_meldung = status_meldung + "Starte Verarbeitung \n";
		
		
		intPort = Integer.parseInt(Port);	//Sting der Texteingane in int Umwandeln
	    	    
	    for(int x = 0; x < eingabe.length(); x++)
	    	{
	    	eingabeHexWert = eingabe.charAt(x);	        
	        myStringBuffer.append(Integer.toHexString(eingabeHexWert));	     
	        }

	    ausgabe_hex = myStringBuffer.toString();
	    ausgabe_hex = ausgabe_hex.toUpperCase();	    
	    
	    myString_append.isBlinken(Blinken);
	    myString_append.isLaufschrift(Laufschrift);
	    
	    HEX_an_Anzeige = myString_append.adding(ausgabe_hex);
	    status_meldung = status_meldung + "Verarbeitung abgeschlossen \n";
	   
	   
	    //Übertragung via WLAN
		WlancomInstanz.setIpadresse(IP);
		WlancomInstanz.setPort(intPort);
		WlancomInstanz.setHexcode(HEX_an_Anzeige);
		WlancomInstanz.uebertragen();
		
		status_meldung = status_meldung + WlancomInstanz.getFehlermeldung();
		
		
		Status = false;
		
		System.out.println("HEX_an_Anzeige: " +HEX_an_Anzeige);
		
		System.out.println("Timerdurchlauf Nr: "+i);
		i++;
		
		System.out.println( "Date = " + myDate +"\n \n \n");
		
	}
}


class DataTelegram
Code:
package version_1;

public class DataTelegram
{
	//Initialisierung
	private int EingabeTextLaengeInt = 0;
	private int Datensatz2LaengeInt = 0;
	private int LaengenByteLaengeInt = 0;

	private String EingabeTextLaengeHexString = null;
	private String Datensetz2Feldattribut = "4C"; // x8 = Y-Zentriert; xC = XY-Zentriert
	private String Datensatz2LaengeString = null;
	private String Datensatz2String = null;
	private String Datensatz2final = null;
	private String Datensatz1final = null;
	private String TelegrammKopf2final = null;
	private String TelegrammKopf1final = null;
	private String LaengenByteString = null;
	private String LaengenByteLaengeString = null;
	private String CheckSummFinal = null;
	private String TelegrammFussfinal = null;

	//Setter Variablen
	private Boolean Blinken = false;
	private Boolean Laufschrift = false;
	
	//Getter Variablen
	private String TelegrammFinalHexString = null;
	
	//Initialisierung von Instanzen
	private StringBuffer Datensatz2 = new StringBuffer();
	private StringBuffer LaengenByte = new StringBuffer();
	private StringBuffer TelegrammKopf1 = new StringBuffer();
	private StringBuffer TelegrammFuss = new StringBuffer();
	private StringBuffer TelegrammFinal = new StringBuffer();
	
	private Checksum HexStringCheckSumm_Objekt = new Checksum();
			
	void isBlinken(Boolean Blinken)
	{
		this.Blinken = Blinken;
	}
	
	void isLaufschrift(Boolean Laufschrift)
	{
		this.Laufschrift = Laufschrift;
	}
		
	//Verarbeitende Methoden
	public String adding(String hexstr )
	{
		//TextLängenByte
		hexstr = hexstr +"00";
												
		EingabeTextLaengeInt = hexstr.length() / 2;	//Anzahl der Eingegebenen Zeichen als Int
		//EingabeTextLaengeHexString = Integer.toHexString(EingabeTextLaengeInt);	//Konvertierung in HexFormat als String
		EingabeTextLaengeHexString = String.format("%02X", EingabeTextLaengeInt);
		if (EingabeTextLaengeHexString.length() == 1 )
		{
			EingabeTextLaengeHexString = "0" + EingabeTextLaengeHexString;
		}
		System.out.println("EingabeTextLaengeInt: "+EingabeTextLaengeInt);
		
		if (EingabeTextLaengeInt > 20)	//Umschaltung Feldattribut von 4C auf 48
		{
			Datensetz2Feldattribut = "48" ;
		}
		
		//Datensatz2 als String
		if ( Blinken == true )
		{
			Datensetz2Feldattribut ="1C";			
		}
		
		if ( Laufschrift == true )
		{
			Datensetz2Feldattribut ="28";	//X Zentrierung nicht möglich, da Lauftext		
		}

		
		Datensatz2.append("013010000000007D5E0010");
		Datensatz2.append(Datensetz2Feldattribut);
		Datensatz2.append(EingabeTextLaengeHexString);
		Datensatz2.append(hexstr);
		Datensatz2String = Datensatz2.toString();

		Datensatz2LaengeInt = Datensatz2.length() / 2 -1;
		//Datensatz2LaengeString = Integer.toHexString(Datensatz2LaengeInt);
		Datensatz2LaengeString = String.format("%02X", Datensatz2LaengeInt);
					
		Datensatz2LaengeString = Datensatz2LaengeString.toUpperCase();
		Datensatz2final = Datensatz2LaengeString + Datensatz2String;		

		//Dazensatz1 String
		//Zeichensatz letzte 2Byte bsp. 01 / 02 / 03
		Datensatz1final ="B903013203";

		//TelegrammKopf2 String
		TelegrammKopf2final ="43010002";

		//erweiterung LaengenByte String		
		LaengenByte.append(TelegrammKopf2final);
		LaengenByte.append(Datensatz1final);
		LaengenByte.append(Datensatz2final);
		LaengenByteLaengeInt = LaengenByte.length() / 2 -1;
		LaengenByteString = LaengenByte.toString();
		LaengenByteLaengeString = Integer.toHexString(LaengenByteLaengeInt);

		//erweiterung TelegrammKopf1 String		
		TelegrammKopf1.append("7E68");
		TelegrammKopf1.append(LaengenByteLaengeString.toUpperCase());
		TelegrammKopf1.append(LaengenByteLaengeString.toUpperCase());
		TelegrammKopf1.append("68");
		TelegrammKopf1final = TelegrammKopf1.toString();
		
		//Pruefsummenberechung
		CheckSummFinal = HexStringCheckSumm_Objekt.CheckSumm(LaengenByteString);
		//CheckSummFinal = 
		
		//erweiterung TelegrammFuss String		
		TelegrammFuss.append(CheckSummFinal);
		TelegrammFuss.append("16");
		TelegrammFussfinal = TelegrammFuss.toString();

		/* ********************************************************************************************** */
		//erweiterung TelegrammFinal String
		TelegrammFinal.append(TelegrammKopf1final);
		TelegrammFinal.append(TelegrammKopf2final);
		TelegrammFinal.append(Datensatz1final);
		TelegrammFinal.append(Datensatz2final);
		TelegrammFinal.append(TelegrammFussfinal);

		TelegrammFinalHexString = TelegrammFinal.toString();
		return TelegrammFinalHexString;
		
	}
}


class Checksum
Code:
package version_1;


public class Checksum
{	
	//Variablen Deklaration	
	private int DezimalWert = 0;
	private int DezimalWertSumme = 0;
	private int ErstesHexChar = 0;
	private int ZweitesHexChar = 2;	
	private int str_laenge = 0;
	
	private String subStr = null;
			
	public String CheckSumm(String HexCheckSumm)
	{		
					
		HexCheckSumm = HexCheckSumm.replace("7D5E" , "7E");			
		
		str_laenge = HexCheckSumm.length();
	
		//Zaehlerschleife zum durchlaufen des HexStrings
		for (int zaehler = 0; zaehler < str_laenge; zaehler = zaehler + 2)    //+ zaehler_sprung )
		{
			subStr = HexCheckSumm.substring(ErstesHexChar, ZweitesHexChar);	//auslesen der gewünschten position als String variable
					
			//String in Int wert umwandeln
			DezimalWert = Integer.parseInt(subStr, 16);
		
			DezimalWertSumme = DezimalWertSumme + DezimalWert;	//CheckSumme
		
			ErstesHexChar = ErstesHexChar +2;
			ZweitesHexChar = ZweitesHexChar +2;
		}	
			
		String CheckSummString = Integer.toHexString(DezimalWertSumme);		

		CheckSummString = CheckSummString.toUpperCase();		
			
		//Liefert nur die letzten beiden String zeichen ... genau wie Modulo %100
		CheckSummString = CheckSummString.substring(CheckSummString.length() -2);		
			
		if ("7D".equals(CheckSummString))
		{
			CheckSummString = "7D5D";			
		}				
			
		HexCheckSumm = CheckSummString;		
		return HexCheckSumm;
	}
}

//Das DatensatzFeld der Anzeige wird niemals einen Int Wert <15 liefern  Daher Unnötig im Programm		
/*		if (DezimalWertSumme < 0xF)
		{
			CheckSummString = "0" +CheckSummString;
		}
*/
 
Zuletzt bearbeitet:
Hallo,

schafft zumindest etwas Klarheit ;-]

Hab' mich gerade mal 'mühselig' durchgescrollt und dann geschaut, was Dein Timer im Gegensatz zu java-Timer anderes macht ...

Wenn ich die Timer Instanz mit cancel() beende, müsste ich eine neue erstellen mit "Senden"... von der weiss allerdings der "Stop" jButton1 nichts
Wie Du schon schreibst, wird durch das "canceln" des Timers in der Tat die Instanz komplett beendet. Also kann sie nirgendwo anders mehr zur Verfügung stehen! Das ist dann wohl auch der große Vorteil des javax-Timers, der die Methoden "start", "restart" und "stop" kennt. Mit "stop" hälst Du ihn einfach nur an, d. h. der folgende Durchlauf findet nicht mehr statt! Danach kann man ihn beliebig mit "start" wieder anwerfen ....

javax.swing.Timer
hatte ich zuvor ausprobiert Funktionierte SUPER ... bis auf das sobald er in die actionPerformed() methode eintritt die Gui eingefrohren bleibt !! Und da ich da keine Lösung für fand... nahm ich mal den java.util.Timer .. welcher mir die Gui nich einfriert.
Du wird vermutlichm it dem zu tun haben, was Du alles innerhalb des action_performed machst. Dies sollte möglichst in einem eigenen Task laufen, da sonst bei lnagen Verarbeitungen ggf. der Haupt-Eventthread solangte angehalten wird!

Ich kann Dir dazu leider keinen Beispielcode posten, weil wir hier eigene Thread-LIB nutzen!

Gruß
Klaus
 
Stimmt Stimmt :suspekt:

Dann Bastel ich nochmal an dem Projekt mit javax.swing.Timer herum.
Ich drück da mal in die action_performed nen neuen Thread rein :rolleyes:

Vielen Dank für den Hinweis (!):)
 
Kannst Du denn nicht ggf. Deinen Timer an den Stellen einfach wieder starten ? ? ?

Du meinst wohl in der javax.swing.Timer version meines Programmes.
Da Starte ich den Timer bequem im "Senden" Button und Stope ihn im "Stop" Button :)
So solls ja auch sein :)

Ich hab eben in die actionPerformed() nen neuen Thread gedrückt... :) *läuft* und die Gui is auch immer erreichbar :rolleyes:

Nur jetzt hab ich n bissl Stress mit den paar Threads das bei "Stop" alle Angehalten werden :rolleyes:

Ich bleibe jetzt doch wieder vorrerst beim javax.swing.Timer ;-]

Danke vfl_freak :)

Ich bin aber weiterhin für alle Vorschläge und Ideen Dankbar :rolleyes:

Gruss Thomas
 
Wenn du etwas im Hintergrund bei einer Swing-GUI machen willst, solltest du keinen eigenen Thread sondern den SwingWorker verwenden.
 

Neue Beiträge

Zurück