J'obtiens cette erreur comme-
Aucune instance englobante de type GeoLocation n'est accessible. Doit qualifier l'allocation avec une instance englobante de type GeoLocation (egxnew A () où x est une instance de GeoLocation). Cette erreur arrive sur la nouvelle ThreadTask (i) . Je ne sais pas pourquoi cela se produit. Toute suggestion sera appréciée.
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);
}
}
}
Réponses:
Salut j'ai trouvé une solution pour ça ;-)
Cette erreur se produit car vous essayez de créer une instance d'une classe interne
service.submit(new ThreadTask(i));
sans créer d'instance de classe principale.Pour résoudre ce problème, créez d'abord une instance de la classe principale:
Créez ensuite l'instance de la classe que vous aviez l'intention d'appeler, comme suit:
J'espère que cela résoudra votre problème ;-)
la source
Une autre option, et celle que je préfère, serait de définir la classe interne sur statique.
la source
Créez la classe en ligne
static
.Ensuite, vous pouvez instancier la classe interne comme suit:
la source
Faites cette structure:
FICHIER
GeoLocation.java
}
Fichier
ThreadTask.java
la source
Vous devez créer une instance de la classe parent afin de créer des instances de vos classes internes. Voici un exemple:
la source
Cela peut également se produire si vous accédez à des membres non statiques à partir des méthodes statiques ou de la même manière. Voici deux aspects différents, l'un qui cause l'erreur et l'autre un morceau de code résolu. c'est juste la question de rendre autre comme classe "statique"
Cela génère l'erreur Aucune instance englobante de type StackArrList n'est accessible. Doit qualifier l'allocation avec une instance englobante de type StackArrList (par exemple, xnew A () où x est une instance de StackArrList). et ne permettra pas de créer une instance de la classe Stack
Lorsque vous transformez la classe Stack en classe statique, Stack fonctionnera correctement et aucune erreur ne sera présente.
la source