Threads dynamisch Erzeugen.

Kai Cierpka

Grünschnabel
Threads dynamisch Erzeugen.

Meine Frage oder besser gesagt anliegen ist ob mir jemand bei meinem Problem weiterhelfen kann. Ich möchte nach betätigen eines Buttons x-Threads (je nachdem wie viele ich zuvor ausgewählt habe) angelegt und gestartet werden. Alle die „Threadklassen“ liegen in anderen Verzeichnissen erben aber alle von der Hauptklasse „HBot“. In dieser sollen die ausgwähltet Threads angelegt und gestartet werden.

Ich steh da schon seit 2 Tagen aufm Schlauch und bekomme das immo einfach nicht hin. Ich wäre über jeden Denkanstoß dankbar.

Mit freundlichen Grüßen Kai
 
Hallo!

Code:
 /**
  * 
  */
 package de.tutorials;
 
 import java.awt.BorderLayout;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 
 import javax.swing.InputVerifier;
 import javax.swing.JButton;
 import javax.swing.JComponent;
 import javax.swing.JFrame;
 import javax.swing.JTextField;
 
 /**
  * @author Tom
  * 
  */
 public class ThreadExample extends JFrame {
 
 	public ThreadExample() {
 		super("ThreadExample");
 		setDefaultCloseOperation(EXIT_ON_CLOSE);
 
 		final JTextField textField = new JTextField(20);
 		textField.setInputVerifier(new InputVerifier() {
 			public boolean verify(JComponent input) {
 				return textField.getText().matches("\\d*");
 			}
 		});
 		JButton btn = new JButton("Create an execute WorkerThreads");
 
 		btn.addActionListener(new ActionListener() {
 			public void actionPerformed(ActionEvent e) {
 				String text = textField.getText();
 				if ("".equals(text)) {
 					return;
 				}
 				int workerThreadCount = Integer.parseInt(text);
 				for (int i = 0; i < workerThreadCount; i++) {
 					new Worker().start();
 				}
 			}
 		});
 
 		add(textField, BorderLayout.WEST);
 		add(btn, BorderLayout.EAST);
 
 		pack();
 		setVisible(true);
 	}
 
 	/**
 	 * @param args
 	 */
 	public static void main(String[] args) {
 		new ThreadExample();
 	}
 
 	class Worker extends Thread {
 		public void run() {
 			for (int i = 0; i < 100; i++) {
 				System.out.println(getName() + ": " + i);
 				try {
 					sleep(50L);
 				} catch (InterruptedException e) {
 					e.printStackTrace();
 				}
 			}
 		}
 	}
 }

Gruß Tom
 
Hallo Tom,

und schon wieder warst du der erster der sich mit meinen Problemen auseinandersetzen mag. Danke erstmal dafür.
Mein Problem sieht jedoch etwas anderes aus.

HBot extends Thread
Robot1 extends HBot
Robot4 extends HBot
Test3 extends HBot
usw.

Dies ist mein Problem. Ich definiere und erzeuge zur Laufzeit des Programms diverse Klassen die hier mit Robot1-3 angegeben sind. Diese sollen jetzt zum Zeitpunkt x als Thread erzeugt werden und anschließend gestartet werden. Dies hatte ich Startisch immer wie folgt gelöst:

Thread th1 = new Robot1(); und so weiter. Jedoch ist dies durch die Erzeugung dieser Klasse erst nach starten des Programms nicht mehr möglich.

Ich hoffe ich konnte mein Problem etwas besser als im ersten Post darstellen.

Mit freundlichen Grüßen Kai
 
Wenn Du die Klasse noch nicht hast, aber schon weißt, wie sie heißen wird, dann erzeuge sie doch nach dem Klassenerstellen so:


Code:
//Klassenerstellen
//...
Thread bsp = (Thread)Class.forName("com.webnobis.sample.Robot1");
bsp.start();
//...
 
Zurück