Я получаю эту ошибку как-
Нет доступных экземпляров типа GeoLocation. Выделение должно быть квалифицировано с помощью включающего экземпляра типа GeoLocation (например, xnew A (), где x - экземпляр GeoLocation). Эта ошибка возникает в новом ThreadTask (i) . Я не знаю, почему это происходит. Любые предложения будут оценены.
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);
}
}
}
Ответы:
Привет, я нашел решение для этого ;-)
Эта ошибка возникает из-за того, что вы пытаетесь создать экземпляр внутреннего класса
service.submit(new ThreadTask(i));
без создания экземпляра основного класса.Чтобы решить эту проблему, сначала создайте экземпляр основного класса:
Затем создайте экземпляр класса, который вы намеревались вызвать, следующим образом:
Надеюсь, это решит вашу проблему ;-)
источник
Другой вариант, который я предпочитаю, - установить статический внутренний класс.
источник
Сделайте встроенный класс
static
.Затем вы можете создать экземпляр внутреннего класса следующим образом:
источник
Сделайте эту структуру:
ФАЙЛ
GeoLocation.java
}
файл
ThreadTask.java
источник
Вам необходимо создать экземпляр родительского класса, чтобы создавать экземпляры ваших внутренних классов. Вот пример:
источник
Это также может произойти, если вы обращаетесь к нестатическим членам из статических методов или аналогичным образом. Ниже приведены два разных аспекта, один из которых вызывает ошибку, а другой - решенный фрагмент кода. просто нужно сделать другой класс "статическим"
Это вызывает ошибку Нет доступного экземпляра типа StackArrList. Должен квалифицировать выделение с помощью включающего экземпляра типа StackArrList (например, xnew A (), где x - это экземпляр StackArrList). и не позволит создать экземпляр класса Stack
Когда вы превратите класс Stack в статический, класс Stack будет работать нормально, и ошибок не будет.
источник