Threads Zugriff auf Attribute

JavaL

Mitglied
Hallo,
ich habe folgenden Code:

Java:
while (tmp <= ai - 1) {
            new Thread(new Runnable() {
                @Override
                public void run() {
                    a[tmp].actionPerformed(ae);
                }
            }).start();
            tmp++;
        }
    }

Innerhalb der run() Methode kann ich auf die Elemente des Arrays a leider nicht zugreifen. Deswegen die Frage, wie schaffe ich es auf diese Arrayelemente trotzdem zuzugreifen? - Ich habe es schon mit get/set Methoden versucht, funktioniert allerdings nicht.

JavaL
 
T

TryToHelp

Gast
was ist den dein
Code:
a
? und wo wird den dein
Code:
a
definiert?
 

JavaL

Mitglied
a ist ein ActionListener Array.
Anmerkung: Das ActionListener Array ist natürlich gefüllt und ai mit entsprechendem Wert gesetzt!

Java:
public class ... {
private int ai = 0, tmp = 0;
private ActionListener[] a = new ActionListener[10];

...

public void pae(ActionEvent e) {
        while (tmp <= ai - 1) {

            new Thread(new Runnable() {
                @Override
                public void run() {
                    a[tmp].actionPerformed(e);
                }
            }).start();
            tmp++;
        }
    }
 
Zuletzt bearbeitet:
N

nillehammer

Gast
Schreib Dir eine eigene Klasse, die Runnable implementiert. Definiere hierfür einen Konstruktor, dem Du das Array übergeben kannst. Speichere es in einer privaten finalen Instanzvariablen. Dann kannst Du auch von der run-Methode aus zugreifen.
[EDIT]Evtl. auch einfach Thread extenden. Ist für diesen Fall vielleicht weniger Arbeit.[/EDIT]
 

JavaL

Mitglied
Danke für die Antwort. Daran hatte ich natürlich auch schon gedacht. Aber gibt es auch eine Möglichkeit ohne eine extra Thread Klasse dafür zu definieren?
 
N

nillehammer

Gast
Danke für die Antwort. Daran hatte ich natürlich auch schon gedacht. Aber gibt es auch eine Möglichkeit ohne eine extra Thread Klasse dafür zu definieren?
Ja, indem Du das Array irgendwo global hälst, bspw. als static (final) Variable oder als (final) Instanzvariable einer emum. Aber bei global-Variablen bin ich immer sehr skeptisch und verwende sie praktisch nie außer für die Definition einfachster Konstanten.
 

JavaL

Mitglied
Danke, ja die static Variante finde ich auch "hässlicher" aber momentan interessanter, weil ich keine Ahnung habe wie ich das anstellen soll.

Java:
static int ai = 0;
static int tmp = 0;
static ActionListener[] a = new ActionListener[1000];

So habe ich es nämlich momentan, aber bekomme im Thread immer noch die Rückmeldung, dass Array enthält keine ActionListener Objekte (NullPointerException).
 
T

TryToHelp

Gast
du musst in deinem Thread, vor dem
Code:
a
noch den classennamen setzten, also
Code:
classenname.a
 

Marco13

Top Contributor
Man kann aus so einer anonymen inneren Klasse auf den Array zugreifen. Wenn du meinst, das es nicht geht, poste ein KSKB, wo es nicht geht. ActionListener in einem Array zu speichern und actionPerformed auf verschiedenen Threads auszuführen klingt aber SO sehr nach Bogus, dass du lieber erwähnen solltest, was du eigentlich vorhast...
 
N

nillehammer

Gast
Java:
static ActionListener[] a = new ActionListener[1000];
Damit hast Du auch nur das Array vorbereitet, bis zu 1000 ActionListener aufzunehmen. Reingetan hast Du aber noch nichts. Irgenwo musst Du die ActionListener-Instanzen herbekommen und zuweisen in etwa so:
Java:
a[0] = ...
oder mit ner Schleife
[EDIT]Das mit dem Präfix Klassenname vergesse ich immer. TryToHelp hätte den Dank verdient, weil er erster war. Aber leider nicht angemeldet :autsch:, also kriegt Marco ihn :D[/EDIT]
 
Zuletzt bearbeitet von einem Moderator:

JavaL

Mitglied
@nillehammer: Das Array ist, wie oben erwähnt, bereits mit ActionListener gefüllt worden. Dafür ist eine andere Methode zuständig die problemlos läuft.
 

JavaL

Mitglied
Java:
static int ai = 0;
static int tmp = 0;
static ActionListener[] a = new ActionListener[1000];

...

public void run() {
EventDispatcherImpl.a[EventDispatcherImpl.tmp].actionPerformed(ae);
}

Danke TryToHelp aber ist stehe glaube ich gerade mächtig auf der Leitung. ???:L

Ausgabe:
null
Exception in thread "Thread-1" Exception in thread "Thread-0" java.lang.NullPointerException
null
 

JavaL

Mitglied
Jungs/Mädels ich habe es jetzt doch mit einer extra Klasse für Thread und per Konstruktor realisiert. Ist schöner, hätte trotzdem gewusst warum es anderst nicht funktioniert.

Aber euch aufjedenfall Danke!
 

JavaL

Mitglied
Okay, ich melde mich nochmal! Vergesst alles vorherige.. Es ist richtig aus annonymen Klassen ist Zugriff möglich. Ich hatte zwei ActionListener Objekte angelegt. Die Variable tmp wurde bei jedem Schleifendurchlauf um eins erhöht. Zum Zeitpunkt als die Methode run() ausgeführt werden soll, war die Variable tmp aber bereits bei 2 (zur Erinnerung, Array hatte nur zwei ActionListener Objekte: Index 0&1).

Mit sleep konnte ich nun erreichen, dass gewartet wird bis der Thread auch wirklich gestartet wird und dann wird erst hochgezählt.

Warum, wird die Inkrementierung ausgeführt, bevor der Thread gestartet ist?? - Wie löst man das Problem OHNE sleep?

Java:
public void processActionEvent(final ActionEvent ae) throws InterruptedException {
        while (tmp <= ai - 1) {
            new Thread(new Runnable() {
                @Override
                public void run() {
                    a[tmp].actionPerformed(ae);
                }
            }).start();
            Thread.sleep(10); // :-(
            tmp++;
        }
    }
 

Marco13

Top Contributor
Du suchst wohl sowas wie
Java:
        while (tmp <= ai - 1) {
            final int index = tmp; //--------------- Speichern
            new Thread(new Runnable() {
                @Override
                public void run() {
                    a[index].actionPerformed(ae); // --------- Verwenden
                }
            }).start();
            tmp++;
Aber nochmal: Das sieht vom Ansatz her schon nach gröbstem Unfug aus. ActionPerformed darf nicht einfach so von jedem beliebigen Thread ausgeführt werden, und selbst wenn es das dürfte, wäre das Konstrukt Murksig! :autsch:
 

JavaL

Mitglied
Du suchst wohl sowas wie
Das hatte ich bereits. :) - Die Lösung ist nur doof.^^

Aber nochmal: Das sieht vom Ansatz her schon nach gröbstem Unfug aus. ActionPerformed darf nicht einfach so von jedem beliebigen Thread ausgeführt werden, und selbst wenn es das dürfte, wäre das Konstrukt Murksig!
Die Aufgabenstellung die ich bekommen habe, ist, dass die actionPerformed Methode jedes ActionListener Objekt, welches sich im ActionListener Array befindet, von einem eigenen Thread ausgeführt wird.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Zugriff auf Attribute eins Objekts über ActionListener Java Basics - Anfänger-Themen 4
Q Zugriff auf Attribute Java Basics - Anfänger-Themen 3
S Klassen Zugriff auf Attribute einer zweiten Klasse, welche durch dritte gesettet wurden? Java Basics - Anfänger-Themen 2
P Zugriff auf Attribute einer Klasse, zu der keine Verbindung besteht Java Basics - Anfänger-Themen 11
Q Zugriff auf Attribute einer Unterklasse Java Basics - Anfänger-Themen 7
M Zugriff auf Attribute über Methoden Java Basics - Anfänger-Themen 6
A statische Attribute: Vererbung und Zugriff darauf Java Basics - Anfänger-Themen 15
Z Zugriff auf Attribute nach Zuweisung einer Referenz Java Basics - Anfänger-Themen 8
I In unterschiedlichen Applikation Zugriff auf eine gemeinsame Anwendung? Java Basics - Anfänger-Themen 8
C Zugriff auf Methode Java Basics - Anfänger-Themen 2
I Applikationsserver (WildFly) - Zugriff auf Ressourcen.. Problem mit Pfade Java Basics - Anfänger-Themen 10
J Zugriff auf eine 2. Klasse die per UI-Designer erstellt wurde Java Basics - Anfänger-Themen 1
Encera Zugriff auf Map-Objekte Java Basics - Anfänger-Themen 3
T Zugriff auf Control anderer Klasse Java Basics - Anfänger-Themen 5
W Unterschiede bei Zugriff auf Objekt und Klassenvariablen über einen Getter? Java Basics - Anfänger-Themen 2
EchtKeineAhnungManchmal hallo habe ein Problem mit einer Datei -> (Zugriff verweigert) Java Basics - Anfänger-Themen 4
R TreeSet Zugriff aus anderer Klasse Java Basics - Anfänger-Themen 8
C Kein Zugriff auf Klassenmethoden in Main Methode Java Basics - Anfänger-Themen 23
H Zugriff verweigert Java Basics - Anfänger-Themen 5
moiss002 Umgebungsvariable Kein Zugriff auf ein Array Java Basics - Anfänger-Themen 7
B Probleme mit Zugriff auf Dateisystem Windows 10 ( jFileChooser) Java Basics - Anfänger-Themen 17
B Zugriffsmodifier, Zugriff außerhalb Package Java Basics - Anfänger-Themen 5
C Zugriff auf Attribut von Oberklasse Java Basics - Anfänger-Themen 8
P Klasse hat keinen Zugriff auf getter/setter-Methoden eines Objektes Java Basics - Anfänger-Themen 9
B Methoden Methoden haben kein Zugriff auf variablen Java Basics - Anfänger-Themen 4
M Gettter/Setter Methoden Klassenfelder kapselung und zugriff? Java Basics - Anfänger-Themen 1
S Zugriff auf protected Fields = guter Programmierstil? Java Basics - Anfänger-Themen 11
M Pfadprobleme - Zugriff auf einen Ordner im Workspace Java Basics - Anfänger-Themen 17
ruutaiokwu Bluetooth-Zugriff, braucht es dazu plattformabhängige Libraries oder kann das Java mittlerweile selbst? Java Basics - Anfänger-Themen 10
R Zugriff auf den Index eines Arrays, welches ein Objekt ist. Java Basics - Anfänger-Themen 4
M Zugriff auf eine ArrayList in einer anderen Klasse Java Basics - Anfänger-Themen 4
P Zugriff auf Variablen anderer Klassen in Greenfoot Java Basics - Anfänger-Themen 1
L Methoden Zugriff <identifier> expected Java Basics - Anfänger-Themen 13
T Java - Zugriff nur mit CLASSPATH ? Java Basics - Anfänger-Themen 7
B Klassen Zugriff auf ein Objekt einer Klasse aus einer Methode heraus Java Basics - Anfänger-Themen 4
D Zugriff auf Methode einer anderen Klasse Java Basics - Anfänger-Themen 5
S Zugriff auf Objekt Java Basics - Anfänger-Themen 5
A Klassen Zugriff auf Instanzen Java Basics - Anfänger-Themen 2
N ArrayList in eigener Klasse erzeugen mit Zugriff Java Basics - Anfänger-Themen 7
J Zugriff auf Variable in anderem Programm Java Basics - Anfänger-Themen 5
J Klassen Zugriff auf ein "String Array" Java Basics - Anfänger-Themen 6
H Datentypen ArrayList in ArrayList: Zugriff Java Basics - Anfänger-Themen 6
J get methoden zugriff und objekt erzeugung Java Basics - Anfänger-Themen 30
J Datenbank Zugriff Java Basics - Anfänger-Themen 24
T Zugriff auf JCheckBox Java Basics - Anfänger-Themen 8
E Netzlaufwerk Zugriff schlägt fehl Java Basics - Anfänger-Themen 11
C Group, Actor und Instanz-Zugriff, LibGDX Java Basics - Anfänger-Themen 4
S Zugriff auf Attribut einer unbekannten Klasse erhalten Java Basics - Anfänger-Themen 6
R Methoden Methode der GUI-Klasse Zugriff auf Methoden der Hauptklasse Java Basics - Anfänger-Themen 9
S Vererbung Zugriff auf die Basisklasse einer "zweiten" Erweiterungsklasse Java Basics - Anfänger-Themen 2
Z Threads Threads - Zugriff auf Ressourcen ohne(Lock, Synchronized) Java Basics - Anfänger-Themen 2
S Vererbung Zugriff auf Methode funktioniert nicht (static/non-static) Java Basics - Anfänger-Themen 3
F Klassen Zugriff auf verschachtelte Objekte Java Basics - Anfänger-Themen 11
J Sichtbarkeit und Zugriff Java Basics - Anfänger-Themen 9
G Wieviel kostet der Zugriff auf Objektattribute im Vergleich zur Erstellung von vars in Methode? Java Basics - Anfänger-Themen 11
L Zugriff auf zwei Java-Quellcodes Java Basics - Anfänger-Themen 3
A OOP Zugriff auf Objekte von außen Java Basics - Anfänger-Themen 8
M Kapselung Datenkapselung Sinn direkter Zugriff? Java Basics - Anfänger-Themen 1
G Methoden Zugriff auf Methode.. aus einer anderen Klasse Java Basics - Anfänger-Themen 6
J JDialog Zugriff auf parent JDialog Java Basics - Anfänger-Themen 5
K Collections Zugriff auf ein bestimmtes Element in der Collection Java Basics - Anfänger-Themen 1
K ArrayList in Konstruktor - wie späterer Zugriff Java Basics - Anfänger-Themen 2
F Zugriff auf Objekt einer anderen Klasse Java Basics - Anfänger-Themen 7
P Zugriff auf Felder in ArrayList Objekten Java Basics - Anfänger-Themen 2
J Erste Schritte Zugriff auf Eigenschaft Java Basics - Anfänger-Themen 2
M MVC - Problem mit Zugriff auf Objekt Java Basics - Anfänger-Themen 4
D Zugriff auf von einer anderen Klasse erstellten Objekten Java Basics - Anfänger-Themen 5
C 5 - Zugriff verweigert Java Basics - Anfänger-Themen 1
K Zugriff auf Variabeln Wert einer Instanz Java Basics - Anfänger-Themen 4
A Methoden Zugriff auf eingelesene Variablen in der main Methode (ohne Änderung der Parameterliste) Java Basics - Anfänger-Themen 4
Z Methoden Zugriff mit Klasse 3 auf Methode von Klasse 2 welche in Klasse 1 erzeugt wird Java Basics - Anfänger-Themen 6
Z Zugriff auf andere Methoden Java Basics - Anfänger-Themen 12
Z Zugriff auf Pakete Java Basics - Anfänger-Themen 5
G Zugriff zwischen Klassen Java Basics - Anfänger-Themen 15
N Problem mit Swing Textfeld und Zugriff aus anderer Klasse Java Basics - Anfänger-Themen 6
H Kein Zugriff auf das Element einer JList möglich: Fehlermeldung Java Basics - Anfänger-Themen 2
W OOP Zugriff auf mit Objekt erstellte Struktur Java Basics - Anfänger-Themen 7
F Klassen Zugriff auf Fenster aus versch. Klassen Java Basics - Anfänger-Themen 5
M Variablen Zugriff von außerhalb eines Blockes auf eine Variable innerhalb eines Blockes Java Basics - Anfänger-Themen 2
U Methoden Zugriff auf Array von weiterer Methode einer Klasse, Rückgabewert Problem Java Basics - Anfänger-Themen 5
B Klassen Zugriff auf Daten der Child-Klasse Java Basics - Anfänger-Themen 9
W Typisierte ArrayList und der Zugriff auf den Typ Java Basics - Anfänger-Themen 5
M Zugriff auf Klasse Java Basics - Anfänger-Themen 2
K Zugriff auf C: Java Basics - Anfänger-Themen 5
S Das richtige Format für den SOAP Zugriff Java Basics - Anfänger-Themen 0
N Zugriff bei Package Struktur Java Basics - Anfänger-Themen 6
M Enum: Zugriff auf Konstanten Java Basics - Anfänger-Themen 7
V Zugriff auf jProgressbar Java Basics - Anfänger-Themen 10
B Zugriff auf csv-Datei per hashmap Java Basics - Anfänger-Themen 5
G Spalte in JTable unsichtbar machen, Zugriff auf Daten ermöglichen Java Basics - Anfänger-Themen 2
T ZUgriff auf 'Werte' Java Basics - Anfänger-Themen 3
J Vererbung Zugriff auf private Variable Java Basics - Anfänger-Themen 10
C Klassen Zugriff auf Objekt anderer Klasse Java Basics - Anfänger-Themen 8
B Methoden Zugriff auf Variable ermöglichen Java Basics - Anfänger-Themen 3
M Zugriff auf Arraylist Java Basics - Anfänger-Themen 7
D Kein Zugriff auf JFrame Java Basics - Anfänger-Themen 2
K Zugriff einer Klasse auf eine andere Andere -> bad operand for binary operator Java Basics - Anfänger-Themen 5
B Erste Schritte Array-Zugriff Java Basics - Anfänger-Themen 10
D OOP Zugriff auf Objekte A in Klasse A aus Objekt B in Klasse B Java Basics - Anfänger-Themen 3
T Collections Zugriff auf Elemente aus Iterator() Schleife Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben