threads

Status
Nicht offen für weitere Antworten.

Bastian

Bekanntes Mitglied
folgende situation:

Sudoku.java
Code:
public class Sudoku extends Thread {

	
	public void init() {

		// Vorbelegung aller Felder mit Nullen

		// Markiere für alle Felder alle ZufallsZahlen als "nicht versucht"

	}
	
	public void fill() {
	
			// Suche das erste Feld mit Wert Null
	

			// Fertig, falls kein freies Feld mehr gefunden wurde

	
			// Suche für dieses Feld eine Zufallszahl, die noch nicht versucht
			// wurde
			// und die keine doppelten Einträge erzeugt
	


			// Falls passende ZufallsZahl gefunden wurde, schreibe diese in das
			// Feld
			// Falls nicht, backtrack
	


	}

	public boolean doppelt(int row, int col, int ZufallsZahl) {

		// Doppelte Einträge in Reihe?
	 
		// Doppelte Einträge in Spalte?
 
		// Bestimme linke obere Ecke der Region
 
		// Doppelte Einträge in Region?
 
	}

	public boolean zahlenUebrig(int row, int col) {

	}

	public void backtrack(int row, int col) {

		// Markiere für das aktuelle Feld alle Zufallszahlen als "nicht
		// versucht"


		// Setze das vorige Feld auf Null zurück

	}

	public int[][] getSudoku() {
		return Sudoku;
	}
}

Main.java:
Code:
[...]
	public void fuelleSpielfeld(int level) {
	
		sudoku.init();
		sudoku.fill();
               
               //fülle alle Zahlen in alle Felder
	}

so, wie programmiere ich das ganze in threads??
ich habe gedacht, ich lasse Sudoku.java von Thread erben, schreibe alles was in fill() steht (der code in der fill()-methode kann unter umständen sehr lange zum ausführen brauchen) in die run()-methode und rufe dann in Main.java

Code:
Sudoku sudoku = new Sudoku();
sudoku.init()
sudoku.start();

auf. geht aber nicht. die ganze gui (swing) bleibt hängen, also funktioniert irgendwas mit dem thread nicht richtig...
 

Redfrettchen

Bekanntes Mitglied
Hi,
versuch mal in deiner Schleife (ich vermute mal, dass in run() sowas wie ne schleife steht) ab und an Thread.sleep(long) bzw. Thread.yield() aufzurufen.
Aber an sich sollte Sudoku-Lösen (oder ist es Erstellen?) nicht so lange dauern und extensiv viel Prozessorleistung/RAM beanspruchen.
Wenns nicht hilft, kannst du ja mal den kompletten Code (oder die relevanten Stellen: run(), init()) posten.
 
S

SlaterB

Gast
selbst bei Dauerbelastung sollte die GUI nicht weiter geschädigt sein,
wenn die GUI nicht reagiert, dann ist das meist ein Zeichen dafür dass im Event-Thread der GUI irgendwas berechnet wird,
also z.B. von einem Button aus die fill()-Operation gerufen wird statt sie korrekt in einem Thread zu starten,

hier mal ein Beispiel für einen durchgängig beschäftigten Thread:

Code:
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;

public class TestGUI extends JFrame {

	JTextArea a = new JTextArea(10, 10);

	public TestGUI() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setSize(400, 400);

		getContentPane().add(a, BorderLayout.CENTER);
		new Sudoku().start();
	}

	class Sudoku extends Thread {

		public void run() {
			while (true) {
				int j = 0;
				for (int i = 0; i <= 200000000; i++) {
					j++;
				}
				a.append("\neine Runde fertig");
			}
		}
	}
	
	public static void main(String[] args) {
		new TestGUI().setVisible(true);
	}
}
 

Bastian

Bekanntes Mitglied
hm, ich glaube ihc habs, allerdings gibt es ein neues prob.

wie kann ich in Main.java die getSudoku()-methode erst aufrufen, wenn der thread bereits abgelaufen ist?
 

Leroy42

Top Contributor
Indem du dich mit join() an ihn bindest. In einer GUI-Anwendung würde ich
das aber nicht unbedingt so machen, weil du damit alles lahmlegst.

Wäre es nicht besser, daß der Sudoko-Erzeugungsthread am Ende selbst eine Methode
aufruft, die dein Spiel dann startet?
 

Bastian

Bekanntes Mitglied
ja, ich habe es jetzt im prinzip so gemacht, wie du gesagt hast:

Code:
import javax.swing.JTextField;

public class LoesungThread extends Thread {
	Loesung l1 = new Loesung();
	int[][] problem;
	JTextField[][] fields = new JTextField[9][9];
	
	public void setFields(JTextField[][] fields){
		this.fields = fields;
	}
	
	public void setProblem(int[][] problem){
		this.problem = problem;
	}
	
	public void run(){
		l1.init(problem);
		l1.fill();
		for (int x = 0; x <= 8; x++) {
			for (int y = 0; y <= 8; y++) {
				fields[x][y].setText(Integer.toString(l1.getSudoku()[x][y]));
			}

		}
	}
}

allerdings lässt dieser thread sich immer nur einmal aufrufen, beim zweiten mal gibts ne IllegalThreadStateException...
 
S

SlaterB

Gast
warum bloß immer so kompliziert und voller Halbwahrheiten?..

wenn du nicht weißt wie man mit Threads umgeht, dann versuche dieses separate Thema doch erstmal in einfachen Testprogrammen zu lösen?
wozu da 81 Textfelder, reicht denn nicht ein einzelnes?
glaubst du IllegalThreadStateException hat irgendwas mit der Anzahl der Textfelder oder Soduku zu tun?
das ganze drumherum macht es nur schwerer,

und ist wahrscheinlich auch ein Grund warum du immer nur Ausschnitte postest,
IllegalThreadStateException, wo tritt die denn auf?
wieso den Thread mehrmals starten? wer startet den, auf welches Ereignis hin? mit welchen 1-3 Codezeilen?
das ist alles wichtig


von mir wiederum ein Beispiel in dem alles problemlos läuft..,
(am Ende der run-Operation wird ein neuer Thread gestartet)

Code:
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;

public class TestGUI extends JFrame {

	JTextArea a = new JTextArea(10, 10);

	public TestGUI() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setSize(400, 400);

		getContentPane().add(a, BorderLayout.CENTER);
		LoesungThread l = new LoesungThread();
		l.setArea(a);
		l.start();

	}

	public class LoesungThread extends Thread {

		JTextArea area;

		public void setArea(JTextArea newArea) {
			this.area = newArea;
		}

		public void run() {
			area.append("\nNew Problem");
			try {
				// 3 Sekunden warten
				for (int i = 0; i < 10; i++) {
					Thread.sleep(300);
					area.append(".");
				}
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			area.append("\nProblem solved");




			LoesungThread l = new LoesungThread();
			l.setArea(a);
			l.start();
		}
	}

	public static void main(String[] args) {
		new TestGUI().setVisible(true);
	}
}
 
S

SlaterB

Gast
also ich habe nicht behauptet dass du deinen ganzen Code posten sollst ;),
und auf 'in mein Programm bitte folgendes einbauen' mag ich dann auch nicht mehr reagieren

aber vielleicht findet sich jemand anders, viel Glück
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Nutzt Eclipse alle CPU-Threads beim Ausführen von Java-Programmen? Java Basics - Anfänger-Themen 4
C Threads und Swing Java Basics - Anfänger-Themen 9
berserkerdq2 Wo finde ich in der Java Api die Notation zu Threads bezüglich Synchronized? Java Basics - Anfänger-Themen 14
berserkerdq2 Findet eine parallele Verarbeitung in Java bei Threads erst statt, wenn man die Methoden auch synchronized? Und wie sieht bei Conditions aus? Java Basics - Anfänger-Themen 8
B Monitor als Schranke von Threads Java Basics - Anfänger-Themen 20
W Threads Alphabet Java Basics - Anfänger-Themen 20
H Threads Anfänger Java Basics - Anfänger-Themen 17
G Threads parallel laufen Java Basics - Anfänger-Themen 11
B Threads Problem mit mehreren Threads Java Basics - Anfänger-Themen 38
M Threads Java Basics - Anfänger-Themen 12
L Threads Synchronisierung zwischen threads Java Basics - Anfänger-Themen 4
M Threads Java Basics - Anfänger-Themen 2
A Threads Java Basics - Anfänger-Themen 9
A Threads Java Basics - Anfänger-Themen 13
A Threads und .join Java Basics - Anfänger-Themen 14
W Threads starten Java Basics - Anfänger-Themen 2
X Threads Zwei Threads, aber doppelte Ausgabe verhindern (synchronized) Java Basics - Anfänger-Themen 54
J Wieviele threads? Java Basics - Anfänger-Themen 9
J Problem bei seriellem Start von Threads Java Basics - Anfänger-Themen 11
O Threads Java Basics - Anfänger-Themen 2
L Buchungssystem und Threads Java Basics - Anfänger-Themen 2
O Threads - Synchronize(), join(), wait(), notify(), yield() Java Basics - Anfänger-Themen 6
L Klassen NFC Reader und JavaFx Problem -> threads? Java Basics - Anfänger-Themen 2
A Kommunikation zwischen nebenläufigen Threads Java Basics - Anfänger-Themen 4
S Gemeinsame Ressource und Mehrfachinstanziierung von Threads Java Basics - Anfänger-Themen 16
S Verklemmung Threads Java Basics - Anfänger-Themen 11
B Threads 2 Threads gleichzeitig laufen lassen Java Basics - Anfänger-Themen 1
M Threads Threads laufen sequenziell, statt gleichzeitig. Java Basics - Anfänger-Themen 9
M Threads run Methode Java Basics - Anfänger-Themen 4
javajoshi mehrere Threads: Methoden zentral unterbringen Java Basics - Anfänger-Themen 8
javajoshi Problem mit zwei Threads und Arrays (Runnable) Java Basics - Anfänger-Themen 12
L Threads Mit Threads JLabel ändern! Java Basics - Anfänger-Themen 2
K Matrixen berechnen nach Worker Master Paradigma mit Threads Java Basics - Anfänger-Themen 4
S Kleine Frage zu Threads Java Basics - Anfänger-Themen 3
M Mit 2 Threads eine Zahl hochzählen Java Basics - Anfänger-Themen 13
T Threads Synchronisieren Java Basics - Anfänger-Themen 6
D Frage Threads Java Basics - Anfänger-Themen 6
Z Threads Executor Framework - Aufgabe auf n Threads aufteilen Java Basics - Anfänger-Themen 10
Z Threads Threads - Zugriff auf Ressourcen ohne(Lock, Synchronized) Java Basics - Anfänger-Themen 2
kilopack15 Verständnisfrage zur Verwendung von notify() bei Threads Java Basics - Anfänger-Themen 2
kilopack15 Mehrere Threads in einer Klasse Java Basics - Anfänger-Themen 8
H Threads funktionieren nicht Java Basics - Anfänger-Themen 4
J Aufgabe(Threads) richtig verstanden/implementiert Java Basics - Anfänger-Themen 27
R Threads aufeinander warten lassen? Java Basics - Anfänger-Themen 10
T Threads Durch threads gestartete Prozesse killen Java Basics - Anfänger-Themen 2
J Threads Java Basics - Anfänger-Themen 38
D Alte Klausuraufgabe Threads Java Basics - Anfänger-Themen 10
A Threads Threads bestimmte Aufgaben zuweisen... Java Basics - Anfänger-Themen 3
R Threads in JavaFX Java Basics - Anfänger-Themen 3
E Threads Doppelte Threads beenden Java Basics - Anfänger-Themen 4
F Sicheres Zurückmelden aus Threads Java Basics - Anfänger-Themen 0
G Threads zum Thema Threads??? null Ahnung Java Basics - Anfänger-Themen 4
Q Threads Threads in Swing Anwendungen Java Basics - Anfänger-Themen 5
J ConcurrentCalculation Multi Threads in Java Java Basics - Anfänger-Themen 3
P Threads Trotz Threads wird nur 1 Prozessorkern ausgelastet Java Basics - Anfänger-Themen 7
M "restartable" threads Java Basics - Anfänger-Themen 11
M Threads - summieren Java Basics - Anfänger-Themen 13
W Klassen Variable einer anderen Klasse ändern (Threads) Java Basics - Anfänger-Themen 3
E Threads - Programm analysieren Java Basics - Anfänger-Themen 2
E join() bei zwei Threads Java Basics - Anfänger-Themen 2
T Threads Threads richtig synchronisieren Java Basics - Anfänger-Themen 3
D [Concurrency/Threads] Code Umsetzung Schriftlich Java Basics - Anfänger-Themen 2
D Threads Java Basics - Anfänger-Themen 4
M Threads nio Dateien kopieren, Threads und Gui Java Basics - Anfänger-Themen 0
N Verweise auf Variablen in verschiedenen Threads Java Basics - Anfänger-Themen 4
T Java-Threads Java Basics - Anfänger-Themen 0
G Moving Objects with Threads (implements Runnable) Java Basics - Anfänger-Themen 1
F Threads funktionieren auf JPanel nicht Java Basics - Anfänger-Themen 1
M Problem mit Threads Java Basics - Anfänger-Themen 11
M Threads - wo gehören sie hin? Java Basics - Anfänger-Themen 3
S 2D-Spiel mit Threads... Java Basics - Anfänger-Themen 3
J Threads Java Basics - Anfänger-Themen 3
F ExecutorService und offene Threads Java Basics - Anfänger-Themen 3
P Threads Threads nicht nebenläufig Java Basics - Anfänger-Themen 7
M Threads nicht nebenleblaufig Java Basics - Anfänger-Themen 2
B Threads parallel zur main Java Basics - Anfänger-Themen 3
M Threads Java Basics - Anfänger-Themen 2
M Threads, zwei methoden gleichzeitig laufen lassen Java Basics - Anfänger-Themen 4
M Threads und Methodenübergreifender Variablezugriff Java Basics - Anfänger-Themen 2
J Wie handle ich Threads am besten? Java Basics - Anfänger-Themen 2
H Threads Java Basics - Anfänger-Themen 10
B synchronized threads Java Basics - Anfänger-Themen 17
E Mehrmaliges Ausführen eines Threads Java Basics - Anfänger-Themen 5
E Threads Verständnisfrage bzgl. Threads und Sleep Java Basics - Anfänger-Themen 2
T Alle Threads .notify() Java Basics - Anfänger-Themen 13
R Threads Verständnisschwierigkeit Java Basics - Anfänger-Themen 2
J Können mehere Threads parallel eine Datei lesen? Java Basics - Anfänger-Themen 4
G Methoden in Threads wandeln Java Basics - Anfänger-Themen 7
H Threads Java Basics - Anfänger-Themen 17
F Java Concurrency - Threads Java Basics - Anfänger-Themen 4
V Threads Threads synchronisieren Java Basics - Anfänger-Themen 4
T Threads Join() = Block? oO Java Basics - Anfänger-Themen 4
J Threads ArrayList Problem bei Threads Java Basics - Anfänger-Themen 3
C Objekte durchschleifen / Threads Java Basics - Anfänger-Themen 2
J Threads stoppen mit interrupt - Frage dazu Java Basics - Anfänger-Themen 7
N Pingen in Threads Java Basics - Anfänger-Themen 9
B Threads benutzen Java Basics - Anfänger-Themen 5
E Allgemein Verständnissfrage zum Ablauf mehrerer Threads Java Basics - Anfänger-Themen 4
S Threads erzeugen Java Basics - Anfänger-Themen 11
K Threads Nur 2 von 3 Threads funktionieren Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben