![]() |
|
|
Themen-Optionen |
|
|
Nach oben #1 |
|
Neuer Benutzer
Registriert seit: 08.02.2007
Beiträge: 8
|
Guten morgen erstmal
ich habe ein folgendes Problem: Ich starte von meiner GUI aus einen Thread welcher auch durchläuft und macht was er soll bis ich ihn anhalte. Jedoch brauche ich ihn danach erneut. Als ich ihn dann erneut starten wollte bekahm ich immer nur folgendes: Code:
Exception in thread "AWT-EventQueue-0" java.lang.IllegalThreadStateException MfG und gn8 Jack77 |
|
|
|
|
|
Nach oben #3 |
|
Erfahrener Benutzer
Registriert seit: 23.11.2005
Ort: Stadtallendorf
Beiträge: 139
|
Vielleicht sowas?
java Code:
__________________
Die Menschen wünschen sich Unsterblichkeit, aber wissen nichts anzufangen an einem verregneten Sonntag Nachmittag. |
|
|
|
|
|
Nach oben #4 |
|
Erfahrener Benutzer
Registriert seit: 17.08.2005
Beiträge: 425
|
Leuft der dann immer nacheinander???
Außerdem meinte jack77, dass er den Thread stoppen möchte. Und dann geht er nicht mehr. Ich würde mir ne klasse schreiben, die starten, die dann irgendwann stoppen, und dann ein neues Objekt initialisieren und dieses dann laufen lassen. |
|
|
|
|
|
Nach oben #5 | |
|
Erfahrener Benutzer
Registriert seit: 23.11.2005
Ort: Stadtallendorf
Beiträge: 139
|
Zitat:
@jack77 Wie du schon gemerckt hast, kann man eine Threadinstanz nur einmal benutzen. Poste mal ein bischen Code und versuch mal zu erklären was du vor hast. Vielleicht/Bestimmt läßt es sich anders lösen.
__________________
Die Menschen wünschen sich Unsterblichkeit, aber wissen nichts anzufangen an einem verregneten Sonntag Nachmittag. |
|
|
|
|
|
|
Nach oben #6 |
|
Neuer Benutzer
Registriert seit: 08.02.2007
Beiträge: 8
|
Danke für eure Zahlreichen Antworten. Ich hab mein Problem gelöst bekommen in dem ich vor aufrufen des Threads den Thread lösche und einen neuen entwerfe. Also wie folgt(nur die void
Code:
bauen = null;
bauen = new baumenue();
bauen.setBauen(listGebauede.getSelectedIndex(),1); // Gebauedetyp festlegen
bauen.start(); // Bauthread starten
lblBauStatus.setText(bauen.getGebauedeNamen(listGebauede.getSelectedIndex())); // Baumenue richten
btnBauBauen.setEnabled(false);
btnBauAbbrechen.setEnabled(true);
listGebauede.setEnabled(false);
lblUebersichtBauStatus.setText(bauen.getGebauedeNamen(listGebauede.getSelectedIndex())); // Uebersicht richten
btnUebersichtBauAbbrechen.setEnabled(true);
bau_set = true;
Was dahinter steckt: Ich entwerfe ein kleines Aufbausimulationsspiel in dem man mehrere Städte haben kann. Ich brauche für jede Stadt einen Thread der bauen soll. Mein Problem ist nun dass ich den THread dazü gerne mit den XY Koordinaten der Stadt erstellen möchte. Leider kann ich nicht einen Thread erstellen welcher den Namen aus der Variable für die XY Koordinaten nimmt. Er will dann immer nur einen Thread erstellen welcher so heißt wie die Variable und nichts dessen wert. Hat dort jemand einen Rat? MfG Jack77 |
|
|
|
|
|
Nach oben #7 | |
|
Erfahrener Benutzer
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.619
|
Zitat:
Du willst, dass pro Thread ein anderes Objekt bearbeitet wird, quasi dass es pro "Stadt-"Objekt einen eigenen Thread gibt, ja? Was meinst du jetzt aber mit "Er will dann immer nur einen Thread erstellen welcher so heißt wie die Variable und nichts dessen wert."? |
|
|
|
|
|
|
Nach oben #8 |
|
Neuer Benutzer
Registriert seit: 08.02.2007
Beiträge: 8
|
Ich weiß ist etwas Kompliziert ^^
Also es sieht wie folgt aus: ich habe eine Klasse baumenue welche einen Thread darstellt. Dann habe ich eine Klasse einzelspielergui.java in der ein Objekt(=Thread) aus der Klasse baumenue.java erstellt wird. Nun klappt das ja auch alles aber nur für die aktuelle Stadt. Diese wird durch eine Variable in der Klasse karte.java dargestellt (Karte.aktuell[]) dargestellt d.h. dort befinden sich die X und Y Koordinaten der aktuellen Stadt in der sich der Spieler befindet. Nun wollte ich es wie folgt machen: ich wollte pro Stadt (XY Koordinaten) einen Thread erstellen der dementsprechend die Koordinaten in seinem Namen trägt. Und dort ist mein Problem. Wenn ich ihm sage er soll mir einen Thread erstellen (baumenue bauen + map.aktuell[0] + map.aktuell[1] = new baumenue(); // ich weiß das geht nicht aber so in etwa soll es sein ^^). Ich hoffe ich konnte es euch verständlich machen und hoffe auf Hilfe Thx schonmal Jack77 |
|
|
|
|
|
Nach oben #9 |
|
Benutzer
Registriert seit: 03.12.2005
Ort: Osnabrück
Beiträge: 74
|
Hallo Jack77,
wenn ich dich richtig verstehe, möchtest du also die Koordinaten an ein Objekt der Klasse Baumenue übergeben? Dann würde ich einfach einen Konstruktor definieren, dem du die Koordinaten als Parameter übergibst. Gruß Christian P.S.: Wäre für Koordinaten nicht eher ein Point-Objekt sinnvoll? |
|
|
|
|
|
Nach oben #11 |
|
Neuer Benutzer
Registriert seit: 08.02.2007
Beiträge: 8
|
Ich glaube ich hab mich immer noch unverständlich ausgedrückt: Ich möchte ein Thread erstellen welcher sich aus der Klasse baumenue ableitet. Normalerweise geht das ja so:
baumenue threadname = new baumenue(); Und ich möchte das an das "threadname" noch die XY Koordinaten angeklemmt werden. baumenue threadname34 = new baumenue(); // X = 3 Y = 4 die X und Y Koordinaten sind in einer Vorhandenen Variable vorhanden. Ich hoffe ich konnte mich diesmal verständlicher ausdrücken. MfG Jack77
__________________
.:: OpenSuSE 10.2 .:: Java VM 1.6 PHP-Code:
|
|
|
|
|
|
Nach oben #13 |
|
Erfahrener Benutzer
Registriert seit: 23.11.2005
Ort: Stadtallendorf
Beiträge: 139
|
@jack77
Ich muss dich leider enttäuschen, denn sowas geht in der Form leider nicht. Vielleicht würdest du einen Weg finden, wenn du dich mit der Java Bytecode Specification befasst aber dass wünsch ich keinem Guck dir mal die Java annotations an, damit würde es vielleicht gehen. Kenn mich aber auf dem Gebiet nicht aus, da ich annotations noch nie gebraucht habe. P.S. es gibt doch 1000 Wege sowas zu lösen, warum willst du unbedingt den schwierigsten nehmen?
__________________
Die Menschen wünschen sich Unsterblichkeit, aber wissen nichts anzufangen an einem verregneten Sonntag Nachmittag. Geändert von karahead (13.02.2007 um 14:36 Uhr). |
|
|
|
|
|
Nach oben #14 |
|
Neuer Benutzer
Registriert seit: 08.02.2007
Beiträge: 8
|
Nunja ich möchte halt pro Stadt einen einelnen Bauthread starten. Daher brauch ich halt die Koordinaten der Stad im Namen des Threads. Wenn jemand eine andere Idee hat: ich bin für vieles offen.
MfG Jack77
__________________
.:: OpenSuSE 10.2 .:: Java VM 1.6 PHP-Code:
|
|
|
|
|
|
Nach oben #15 |
|
Erfahrener Benutzer
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.619
|
Hm, nö.
Wieso denn? Du brauchst die Informationen innerhalb der Instanz der Klasse, aber du musst den Thread doch nicht so benennen. xabbuh hat ja schon auf den Konstruktor mit geeignetem hingewiesen |
|
|
|
|
|
Nach oben #16 |
|
Neuer Benutzer
Registriert seit: 08.02.2007
Beiträge: 8
|
Tut mir leid Ben aber ich möchte nicht eine Variable an einen Thread übergeben (dafür gibts ja bekanntlich getter und setter) sondern mehrere Threads welche ich ja irgendwie unterscheiden muss.
MFG Jack77
__________________
.:: OpenSuSE 10.2 .:: Java VM 1.6 PHP-Code:
|
|
|
|
|
|
Nach oben #17 |
|
Erfahrener Benutzer
Registriert seit: 17.08.2005
Beiträge: 425
|
Die Frage ist halt, was du dir vorstellst.
wenn du mehrere Threads hast, warum machst du dann nicht ein Array => baumenue[][] threads = new baumenue[max_x][max_y]; baumenue bm = threads[x][y]; Aber vielleicht hat die Stadt ne ID??? (wars nicht so: pro stadt ein thread?) dann könntest du auch so ein Array machen: (brauchst noch die anzahl von städten, zb. wenn du die auch in einem Array hast baumenue[] threads = new baumenue[cities.length]; baumenue bm = threads[cities.getID()]; oder du hast ne Klasse Cities (oder so was änliches), da kannst du dann ein getter/setter für ein Thread (getThread()/setThread()) hinzu fügen, und die Klasse den Thread verwalten lassen oder ich hab was nicht gesehen/falsch verstanden, dann kann man meinen beitrag überlesen |
|
|
|
|
|
Nach oben #18 |
|
Neuer Benutzer
Registriert seit: 08.02.2007
Beiträge: 8
|
Danke für Eure Hilfe. Hab mein Problem nun gelöst bekommen. Es zu erklären würde zu lange dauern also falls es jemand wissen will soll er mich kontaktieren. Danke nochmal für eure Hilfe
MfG Jack77
__________________
.:: OpenSuSE 10.2 .:: Java VM 1.6 PHP-Code:
|
|
|
|
|
|
Nach oben #19 |
|
Benutzer
Registriert seit: 01.02.2005
Beiträge: 64
|
Hmmm - nur der Form halber...
Wenn du die Position im Var-Namen haben willst, könnte man das nicht auch mit ner Hashtable erledigen, statt mit dem 2D-Array zu arbeiten? Da müsste man vorher noch nicht mal unbedingt die Länge der Liste kennen... Also so von wegen Code:
Hashtable bauThreadTable = new HashTable();
bauThreadTable.put("Stadt54",new bauThread(5,4));
//...etc für weitere Städte
//und der Aufruf dann:
Thread bauen = (Thread) bauThreadTable.get("Stadt54");
bauen.start();
Ich blick da aber nich durch, wie du den Thread laufen lassen willst, ohne ihn von außen mit Infos zu füttern - geht ja um was grafisches, also sollte er doch zumindest irgendwie die Grafikobjekte bekommen... oder hast du etwa alles andere auf die "public" und "static" Modifier gesetzt? Wie hast du's denn gelöst?
__________________
|
|
|
|