[Java] Problem mit Threads und Lists

08/19/2013 23:10 0Slashking0#1
Also ich habe wie die Überschrift schon sagt habe ich ein Problem mit Threads und Lists.
Mit der Funktion List<bla> bla = new ArrayList<bla>(); habe ich für mein seöbstgeschriebenes spiel eine spawnmechanik gebastelt. mein spiel ist dem [Only registered and activated users can see links. Click Here To Register...] Spiel hier nachempfunden. Das spawnen klappt prima wenn ich allerdings versuche meinen mit implements Runnable erstellten Thread zu nutzen um damit ein Spawndelay wie in dem Flashspiel zu programmieren, schaffe ich es nicht. (Mein Problem ist schwer zu verstehen und erklären ich weiß)

Das Problem ist eig. folgendes:
Panel Klasse
Code:
public class GamePanel extends JPanel ....
List<a> b = new ArrayList<a>();
...
Wenn ich über die Panelklasse etwas in die Liste adde funktioniert es.
Wenn ich allerdings versuche etwas über die Threadklasse zu adden klappt es nicht.(Der Thread wird auch gestartet und funktioniert richtig, nur schaffe ich es nicht über den Thread irgendetwas in meiner Panelklasse zu ändern ich habs auch schon mit einem simplen Integer versucht.)
Also z.B.:
Code:
public class KlasseinderderThreadläuft implements Runnable ...
public void run() ...
//hierüber soll etwas zu der liste hinzugefügt werden also
b.add(new a()); 
...
Und ja ich weiß, dass der Code so nicht komplett ist.

EDIT: Es dürfte übrigens daran scheitern, dass ich es nicht schaffe, dass meine Threadklasse irgendwas aus der Panel Klasse lädt (also weder mit panel Panel = new panel noch mit Panel panel; noch mit sonst was, was ich bis jetzt probiert hab)
08/20/2013 22:26 Howaner#2
Hat den dein Runnable überhaupt Zugriff auf die Liste der anderen Klasse?

Ich würds so machen, wenn nicht:
Code:
public class GamePanel extends JPanel {
	public List<a> b = new ArrayList<a>();
	public static GamePanel instance = null;
	
	public GamePanel() {
		instance = this;
	}
}
Code:
public class KlasseinderderThreadläuft implements Runnable {
	public void run() {
		if (GamePanel.instance == null) {
			//Error
			return;
		}
		GamePanel.instance.b.add(new a()); 
	}
}
08/23/2013 16:14 0Slashking0#3
ich danke dir! das hat mir echt geholfen! jetzt gibt es nur das problem, dass ich mehrere einheiten darüber spawnen will ( damit selbst gibts keine weiteren probleme, den code hab ich mir schon selbstgebastelt). das einzige auftretende problem, dass ich hab ist, dass alles in einem thread läuft und das zu bugs führt. ist es möglich immerwieder einen neuen thread zu starten, die sich quasi nicht in die quere kommen?