Ich erhalte diesen Fehler als-
Auf keine einschließende Instanz vom Typ GeoLocation kann zugegriffen werden. Die Zuordnung muss mit einer einschließenden Instanz vom Typ GeoLocation (z. B. neu A (), wobei x eine Instanz von GeoLocation ist) qualifiziert werden. Dieser Fehler tritt bei der neuen ThreadTask (i) auf . Ich weiß nicht, warum es passiert. Anregungen werden geschätzt.
public class GeoLocation {
public static void main(String[] args) throws InterruptedException {
int size = 10;
// create thread pool with given size
ExecutorService service = Executors.newFixedThreadPool(size);
// queue some tasks
for(int i = 0; i < 3 * size; i++) {
service.submit(new ThreadTask(i));
}
// wait for termination
service.shutdown();
service.awaitTermination(Long.MAX_VALUE, TimeUnit.DAYS);
}
class ThreadTask implements Runnable {
private int id;
public ThreadTask(int id) {
this.id = id;
}
public void run() {
System.out.println("I am task " + id);
}
}
}
Antworten:
Hallo ich habe eine Lösung dafür gefunden ;-)
Dieser Fehler tritt auf, weil Sie versuchen, eine Instanz einer inneren Klasse
service.submit(new ThreadTask(i));
zu erstellen, ohne eine Instanz der Hauptklasse zu erstellen .Um dieses Problem zu beheben, erstellen Sie bitte zuerst eine Instanz der Hauptklasse:
Erstellen Sie dann die Instanz der Klasse, die Sie aufrufen möchten, wie folgt:
Ich hoffe das wird dein Problem lösen ;-)
quelle
Eine andere Option, und die, die ich bevorzuge, wäre, die innere Klasse auf statisch zu setzen.
quelle
Machen Sie die Inline-Klasse
static
.Dann können Sie die innere Klasse wie folgt instanziieren:
quelle
Führen Sie diese Struktur aus:
DATEI
GeoLocation.java
}}
Datei
ThreadTask.java
quelle
Sie müssen eine Instanz der übergeordneten Klasse erstellen, um Instanzen Ihrer inneren Klassen zu erstellen. Hier ist ein Beispiel:
quelle
Dies kann auch passieren, wenn Sie über die statischen Methoden oder auf ähnliche Weise auf nicht statische Elemente zugreifen. Es folgen zwei verschiedene Aspekte, einer, der den Fehler verursacht, und ein anderer gelöster Code. Es geht nur darum, andere als Klasse "statisch" zu machen.
Dies löst den Fehler aus. Auf keine einschließende Instanz vom Typ StackArrList kann zugegriffen werden. Die Zuordnung muss mit einer einschließenden Instanz vom Typ StackArrList (egxnew A (), wobei x eine Instanz von StackArrList ist) qualifiziert werden. und erlaubt nicht, eine Instanz der Stapelklasse zu erstellen
Wenn Sie den Klassenstapel zur statischen Klasse machen , funktioniert der Stapel einwandfrei und es tritt kein Fehler auf.
quelle