Thread abarbeiten

anjepieft

Mitglied
Hallo,
ich habe folgendes Problem:
Ich arbeite mit einer GUI in der ich Buttons eingebettet habe. diese Buttons zeigen auf ActionListener. bei einem Klick auf einen Button soll ein Thread gestartet werden. Dieser Thread befindet sich in einer externen Datei.
Wie kann ich diesen Thread aus dem ActionListener aufrufen?


Von hier aus soll der Thread gestartet werden:
Code:
package de.trebess.shutdown;

import javax.swing.*;
import  java.awt.event.*;
import java.awt.*;
import java.io.*;
import java.util.*;

public class uhrzeitAL implements ActionListener
{
	private ShutdownGUI g;
	private static int std = 0;
	private static int min = 0;
        
	public uhrzeitAL(ShutdownGUI g)
	{
		this.g = g;
		
	}
	
	public void actionPerformed(ActionEvent e)
	{
		
		
		
		
			
	}
}


Hier ist der Thread:
Code:
package de.trebess.shutdown;

import java.util.Calendar;

public class uhrzeitThread implements Runnable {
	
	private ShutdownGUI g;
	private static int std = 0;
	private static int min = 0;
	
	public uhrzeitThread()
	{
		this.g = g;
		
	}
	
	@Override public void run()
	{
		std = Integer.parseInt(g.getText1().getText());
		min = Integer.parseInt(g.getText2().getText());
		if(std >= 0 && std <= 23 && min >= 0 && min <= 59)
		{
			if(std == 0)
			{
				std = 24;
			}
			int sleep = ((std - Calendar.getInstance().get( Calendar.HOUR_OF_DAY ) ) * 3600000) + ((min - Calendar.getInstance().get( Calendar.MINUTE )) * 60000);
			System.out.println(sleep);
			
			if(sleep >= 0)
				{
					System.out.println(sleep);
					try
					{
						Thread.sleep(sleep);
						
						try
				        {
				            Runtime.getRuntime().exec("C:\\Windows\\System32\\Shutdown.exe -s -t 00");
				   
				        }
				        catch (Exception exp)
				        {
				        	
				        }
				    
						
						System.exit(0);
						
					}
					catch(InterruptedException ex)
					 {
						 
					 }
				}
				else
				{
					//System.out.println("Die angegebene Uhrzeit ist ungültig");
					//System.out.println("Es ist bereits: "+Calendar.getInstance().get( Calendar.HOUR_OF_DAY )+":"+Calendar.getInstance().get( Calendar.MINUTE )+" Uhr");
				}
		}
	}

}


Hier ist die GUI:
Code:
package de.trebess.shutdown;

import javax.swing.*;
import javax.swing.text.MaskFormatter;




import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.Calendar;


public class ShutdownGUI extends JFrame
{	
	
		JButton uhrzeit = new JButton("Uhrzeit");
		JButton countdown = new JButton("Countdown");
		JTextField hour = new JTextField(2);
		JTextField minute = new JTextField(2);
		JLabel s = new JLabel("Std.");
		JLabel m = new JLabel("Min.");
		JButton info = new JButton("Info");
		JMenuBar menuBar = new JMenuBar();
		JMenu aktion = new JMenu("Aktion");
		JMenu hilfe = new JMenu("Hilfe");
		JMenuItem uhrzeitItem = new JMenuItem("Uhrzeit");
		JMenuItem countdownItem = new JMenuItem("Countdown");
		JMenuItem exitItem = new JMenuItem("Beenden");
		
		
		String helpUhr = "<html><b>Hilfe:</b>"+"<ul><li>Der Rechner fährt zur angegebenen Uhrzeit herunter<li>Tastenkürzel: Strg+U</ul></html>";
		String helpCount = "<html><b>Hilfe:</b>"+"<ul><li>Der Rechner fährt nach Ablauf der angegebenen Zeit herunter<li>Tastenkürzel: Strg+C</ul></html>";
		
		
		
		public ShutdownGUI()
	{
			
		
			
		//JFrame
		//####################################################
		JFrame f = new JFrame("Shutdown-Manager 1.0");
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.setLayout(new FlowLayout());	
		
		//Box b = new Box(BoxLayout.Y_AXIS);
		
		//Tooltips für die Buttons
		//####################################################
		uhrzeit.setToolTipText(helpUhr);
		countdown.setToolTipText(helpCount);	
		
		
		//Menübar wird gesetzt
		//##################################################
		menuBar.add(aktion);
		menuBar.add(hilfe);
		f.setJMenuBar(menuBar);
		aktion.add(uhrzeitItem);
		aktion.add(countdownItem);
		aktion.add(exitItem);
		
		//Shortcuts werden gesetzt
		//#################################################
		uhrzeitItem.setAccelerator(KeyStroke.getKeyStroke('U', InputEvent.CTRL_MASK));
		countdownItem.setAccelerator(KeyStroke.getKeyStroke('C', InputEvent.CTRL_MASK));
		exitItem.setAccelerator(KeyStroke.getKeyStroke('B', InputEvent.CTRL_MASK));
		
		
		//Buttons und Textfelder werden gesetzt
		//###################################################
		//f.add(info);
		f.add(uhrzeit);
		f.add(countdown);
		f.add(s);
		f.add(hour);
		f.add(m);
		f.add(minute);
		
		//Sichtbarkeit und andere anweisungen
		//#############################################
		f.pack();
		f.setVisible(true);
		f.setResizable(false);
		f.setLocation(250,200);
		
		//Coursor Focus wird gesetzt
		//###########################################
		hour.requestFocusInWindow();
		
		//System.out.println(f.getLocation());
		//Action Listener werden gesetzt
		//###################################################
		
		uhrzeit.addActionListener(new uhrzeitAL(this));
		countdown.addActionListener(new countdownAL(this));
		uhrzeitItem.addActionListener(new uhrzeitAL(this));
		countdownItem.addActionListener(new countdownAL(this));
		exitItem.addActionListener(new exitAL(this));
		
		//info.addActionListener(new infoAL(this));
		//prot.addActionListener(new protAL(this));
	}
	
	public JTextField getText1()
	{
		return hour;
	}
	    
	public JTextField getText2()
	{
		return minute;
	}
		
	
}
 
Zuletzt bearbeitet:

zerix

Hausmeister
Moderator
Hallo,

versuch doch bitte mehr auf deine Groß- und Kleinschreibung zu achten.

Da ich deinen Code nicht kenne würde ich doch einfach mal sagen, indem du ein Object dieser Klasse anlegst und den Thread startest.

MFG

Sascha
 

Matze

Weltenwanderer
Was meinst du mit externer Datei? Eine Andere Klasse?

Edit: Da war Sascha wohl schon wieder schneller...
 

Matze

Weltenwanderer
Du legst in deinem ActionListener ein Objekt der Klasse uhrzeitThread an oder verwendest eine schon vorhandenes und startest den Thread:
bsp
Java:
uhrzeitThread objUhrzeit = new uhrzeitThread();
objUhrzeit.start();

Nebenbei: Klassennamen schreibt man groß!