Estou recebendo este erro porque-
Nenhuma instância envolvente do tipo GeoLocation está acessível. Deve qualificar a alocação com uma instância envolvente do tipo GeoLocation (por exemplo, xnew A () onde x é uma instância de GeoLocation). Este erro está chegando no novo ThreadTask (i) . Eu não sei por que isso está acontecendo. Todas as sugestões serão apreciadas.
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);
}
}
}
Respostas:
Olá, encontrei uma solução para isto ;-)
Este erro ocorre porque você está tentando criar uma instância de uma classe interna
service.submit(new ThreadTask(i));
sem criar uma instância da classe principal.Para resolver esse problema, crie primeiro uma instância da classe principal:
Em seguida, crie a instância da classe que você pretendia chamar, da seguinte maneira:
Espero que isso resolva seu problema ;-)
fonte
Outra opção, e a que eu prefiro, seria definir a classe interna como estática.
fonte
Faça a classe inline
static
.Então, você pode instanciar a classe interna da seguinte maneira:
fonte
Faça esta estrutura:
ARQUIVO
GeoLocation.java
}
Arquivo
ThreadTask.java
fonte
Você precisa criar uma instância da classe pai para criar instâncias de suas classes internas. Aqui está um exemplo:
fonte
Isso também pode acontecer se você estiver acessando membros não estáticos a partir de métodos estáticos ou da mesma forma. A seguir estão dois aspectos diferentes, um que causa o erro e outro que é resolvido. é apenas uma questão de fazer outra classe "estática"
Isso gera o erro Nenhuma instância envolvente do tipo StackArrList está acessível. Deve qualificar a alocação com uma instância envolvente do tipo StackArrList (por exemplo ,xnew A () onde x é uma instância de StackArrList). e não permitirá fazer instância da classe Stack
Quando você transformar a classe Stack em uma classe estática, a Stack funcionará bem e nenhum erro ocorrerá.
fonte