java.lang.IllegalAccessError: попытка доступа к методу net.sourceforge.tess4j.Tesseract.‹init›()V из класса Tess4jTest.TestTess

Я сделал проект Java OCR с Tesseract в Mirth. Когда я запускаю файл jar из Mirth, я получаю эту ошибку. Когда я его ищу, я обнаружил, что есть метод init(), а также это защищенная пустота в Tesseract .java. Я думаю, что, возможно, это причина этой ошибки. Что мне делать? Большое спасибо за вашу помощь.

package Tess4jTest;

import java.io.File;
import java.io.IOException;
import net.sourceforge.tess4j.*;

public class TestTess {

public static String Tc;
public static String phone;
public static String date;


public static void main(String[] args) {
    //System.out.println(returnText("C:\\Users\\Nevzat\\Desktop\\deneme.pdf"));
}

public static String returnText(String fileName){

    File imageFile = new File(fileName);
    if(imageFile.exists()){
        Tesseract instance = new Tesseract();
        instance.setDatapath("C:\\imageRAD\\Onam\\tessdata");
        String result = null;
        try {
            result = instance.doOCR(imageFile);
        } catch (TesseractException e) {
            System.err.println(e.getMessage());
        }
        if(result!=null){

            int i=result.indexOf("Numarasn: ");
            int j=result.indexOf("Tel No:");
            int k=result.indexOf("Bilgllendirme Tarihl:");

            Tc = result.substring(i+10, i+21);
            phone = result.substring(j+8,j+23);
            date = result.substring(k+22,k+32);
            //System.out.println(result);
        }else{
            return "Null Error!";
        }

    }else{
        return "Does not found a file!";
    }

    return Tc+","+phone+","+date;
}

public static String returnTC() throws IOException{
    return Tc;
}

public static String returnPhone() throws IOException{
    return phone;
}

public static String returnDate() throws IOException{
    return date;
}

}

person Nevzat Günay    schedule 26.08.2016    source источник
comment
Трудно сказать, выдает ли эта строка исключение? Tesseract instance = new Tesseract(); Если это так, возможно, есть другой конструктор с аргументами, который вы можете вызвать, или фабричный метод, который возвращает Tesseract.   -  person ebyrob    schedule 26.08.2016
comment
Для строки нет исключений. На самом деле, когда я вызываю tess4j-3.0.2.jar для проекта Java в веселье, я получаю эту ошибку. Однако, я вызываю tess4j-3.2.1.jar, я получаю эту ошибку как java.lang.NoSuchFieldError: RESOURCE_PREFIX   -  person Nevzat Günay    schedule 26.08.2016
comment
Все исключения имеют трассировку стека, а трассировки стека исключений содержат номера строк. Я не могу сказать, через какую строку вашего опубликованного кода прошло исключение, основываясь на ваших комментариях. Если вы понизите версию tess4j, она должна быть до версии до 2.0.0. (в любом случае, вероятно, рекомендуется обновить все до последней версии)   -  person ebyrob    schedule 26.08.2016
comment
Я изменил tess4j файл jar на версию 1.5, а также поместил другие файлы jar в соответствии с tess4j-3.2.1, что это самая новая версия.   -  person Nevzat Günay    schedule 26.08.2016
comment
Я получаю новую ошибку, такую ​​как Exception in thread main java.lang.UnsatisfiedLinkError. Также log4j:WARN Не удалось найти приложения для регистратора (org.ghost4j.Ghostscript). log4j:WARN Пожалуйста, правильно инициализируйте систему log4j. log4j:WARN См. logging.apache.org/log4j/1.2/faq.html# noconfig для получения дополнительной информации.   -  person Nevzat Günay    schedule 26.08.2016
comment
Попробуйте instance.setDatapath("C:\\imageRAD\\Onam"); и убедитесь, что вы используете правильную версию JNA.   -  person nguyenq    schedule 26.08.2016
comment
@nguyenq Я проверил путь к файлу и версию jna. Наконец, я решил проблему. Я пишу это как решение.   -  person Nevzat Günay    schedule 29.08.2016


Ответы (2)


Ошибка, которую вы получили, возникает при попытке создать объект с помощью частного конструктора. (<init>() — имя конструктора без параметров)

Глядя на источник tess4j, я нашел метод со следующей документацией:

  • @deprecated Начиная с версии 2.0 вместо этого используйте конструктор по умолчанию.

Глядя на исходный код до версии 2.0, мы видим, что конструктор по умолчанию был закрытым.

Это означает, что ваша проблема, скорее всего, в том, что вы компилируете версию более новую, чем 2.0, но в вашей среде работает более старая, чем 2.0.

Либо обновите свою среду, либо понизьте версию библиотеки, с которой вы строите, чтобы исправить это.

person Kiskae    schedule 26.08.2016

Я решил ошибку и закончил проект. Я упоминаю шаг за шагом

1. Вы должны использовать правильные файлы jar для tess4j.

2. Добавьте все проекты Java в tess4j-3.2.1.zip, кроме tess4j-3.2.1. .jar через путь сборки.

3. Добавьте файл tess4j-1.5.jar из этого.

4. Добавьте папку tessdata, ghost4j-0.5.1.jar, jna-4.1.jar, tess4j.jar и файл jar вашего проекта Java.

person Nevzat Günay    schedule 29.08.2016