Два файла Java.Получение IllegalAccessError при запуске класса с методом main, пытающимся получить доступ к методу из другого файла - PullRequest
0 голосов
/ 22 апреля 2019

Изучение Java.У меня есть два файла, каждый из которых содержит один класс Java.Когда я запускаю файл методом main, я получаю следующую ошибку:

Исключение в потоке "main" java.lang.IllegalAccessError: не удалось получить доступ к классу TapeDeck из класса TapeDeckTestDrive (TapeDeckнаходится в неназванном модуле загрузчика 'app'; TapeDeckTestDrive находится в неназванном модуле загрузчика com.sun.tools.javac.launcher.Main $ MemoryClassLoader @ 18bf3d14) в TapeDeckTestDrive.main (TapeDeckTestDrive.java:3) *

class TapeDeckTestDrive{
  public static void main(String[] args){
    TapeDeck t = new TapeDeck();
    t.canRecord = true;
    t.playTape();

    if (t.canRecord == true) {
        t.recordTape();
    }
  }
}
class TapeDeck {
  boolean canRecord = false;
  void playTape(){

    System.out.println("tape playing");
  }
  void recordTape(){

    System.out.println("tape recording");
  }
}

Любая помощь, пожалуйста?

Ответы [ 2 ]

1 голос
/ 22 апреля 2019

Убедитесь, что каждый класс находится в одной и той же папке, поскольку ошибка говорит о том, что TapeDeckTestDrive не может найти TapeDeck. Я бы порекомендовал начать с IDE, такой как Eclipse, поскольку это поможет вам больше сосредоточиться на кодировании и меньше на проблемах с папками.

Я знаю, что ваш код хорош (по крайней мере, в java 8), так как, когда я скопировал его в eclipse, он работает без проблем, то есть это должно быть проблема с папкой, проблема с установленной версией java или способ вы запускаете код не работает по какой-то причине. Если оба файла находятся в одной и той же папке, я бы позаботился о том, чтобы в вашей java-версии в системных файлах было что-то 1.8 (Program Files (x86), скорее всего, в windows), если в этой версии не указано, что это может быть еще одна проблема с код и синтаксис для этой версии. Еще одна вещь, которая может помочь, - это поставить public за «class» в первой строке каждого класса и сделать Boolean общедоступным. Это может быть требование синтаксиса в других версиях Java или что-то, что необходимо при запуске из командной строки.

0 голосов
/ 22 апреля 2019

Быстрое возможное исправление, попробуйте сделать классы и методы "Публичными".

При нормальных обстоятельствах в этом нет необходимости, но вы можете столкнуться с конкретным случаем, где это может быть (это крайний случай, поэтому я не знаю, проблема ли это или нет, не в моей голове):

Java действительно некомфортна из-за того, что вещи находятся в пакете «По умолчанию» - код из других пакетов не может получить доступ к объектам в пакете по умолчанию (имеется в виду оператор пакета). Хотя это не должно вызывать проблем в вашем случае, возможно, ваши настройки безопасности на уровне «пакета» также не работают в пакете по умолчанию.

Если это действительно проблема, то два исправления - сделать пакеты и методы общедоступными (как я уже говорил выше) или переместить оба класса в пакет.

...