NoSuchMethodError Java - PullRequest
       22

NoSuchMethodError Java

0 голосов
/ 12 января 2020

Я получаю эту ошибку времени выполнения и не знаю, как исправить:

java.lang.NoSucheMethodError: java.io.FileInputStream.transferTo(Ljava/io/OutputStream;)J

Это происходит при использовании метода TransferTo из FileInputStream в ZipOutputStream

FileInputStream fis = new FileInputStream(file);
    ZipEntry zipEntry = new ZipEntry(fileName);

    zos.putNextEntry(zipEntry);

    try {
        fis.transferTo(zos);
    } catch (NoSuchMethodError e) {
        e.printStackTrace();
    }

Ответы [ 2 ]

6 голосов
/ 12 января 2020

Простой: вы скомпилировали свой код против Java 9 (как этот метод был добавлен с java 9, который вы можете увидеть в javado c), но кажется, что вы запускаете его со старой java средой выполнения.

Это исключение всегда говорит о том, что зависимости, которые вы использовали при компиляции, не соответствуют настройкам времени выполнения. Вот и все, что нужно сделать.

1 голос
/ 12 января 2020

Множество причин возникновения NoSuchMethodError

1) java .lang.NoSuchMethodError вызывается, когда программа пытается вызвать метод класса, который не существует. Метод может быть stati c или метод экземпляра.

2) Конфликт из-за того же имени класса. Например, ваше приложение использует какой-то сторонний jar, который имеет такое же полное имя класса, как и у вас. Таким образом, если загрузчик классов загружает класс из другого jar, вы получите java .lang.NoSuchMethodError во время выполнения.

3) Версия Jar, используемая во время компиляции, отличается от времени выполнения. Например, в вашем приложении может быть MySQL jar версии, отличной от той, которая присутствует в папке lib Tomcat. Поскольку jar папок tomcat lib сначала просматривается Java Classloader, существует вероятность java .lang.NoSuchMethodError , если какой-либо метод не найден в загруженном классе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...