Код Java работает нормально, когда создается как независимый статический основной класс, но не при вызове из сервлета

Я использую API Tess4j для выполнения OCR и создал динамический веб-проект в eclipse. Если я создам новый класс Java непосредственно в папке ресурсов Java, код будет работать нормально.

    public static void main(String[] args){
        File image = new File("Scan0008.jpg");  
        ITesseract instance = new Tesseract();
        try{
            String result = instance.doOCR(image);
            System.out.println(result);
        }catch(TesseractException e){
            System.err.println(e.getMessage());
        }
    }

Однако я получаю исключение, когда я вызываю тот же код из моего метода Servlets doPost.

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            Validate valObj = new Validate();
            valObj.validate();
    }
    public void validate() {
        File image = new File("Scan0008.jpg");
        ITesseract instance = new Tesseract();
        try {
            String result = instance.doOCR(image);
            System.out.println(result);
        } catch (TesseractException e) {
            System.err.println(e.getMessage());
        }
    }

Я включил все необходимые банки в папку lib WEB-INF. Также добавили банки в путь сборки проектов. Может ли кто-нибудь сообщить мне, что я делаю неправильно.
Исключение:
java.lang.IllegalStateException: Input not set
23:33:45.002 [http-bio-8080-exec-5 ] ОШИБКА net.sourceforge.tess4j.Tesseract — ввод не задан
java.lang.IllegalStateException: ввод не задан


person Saurabh Gour    schedule 22.04.2016    source источник
comment
Пожалуйста, отформатируйте сообщение. Это беспорядок и не будет прочитан в его нынешнем виде.   -  person tnw    schedule 22.04.2016
comment
Вы уверены, что версия сервлета находит указанный файл? Попробуйте добавить вывод после File image = ..., чтобы убедиться, что файл существует и доступен для чтения.   -  person KevinO    schedule 22.04.2016
comment
@KevinO .. Просто добавил System.out.println() после строки File image = .., и он выводится на экран .. поэтому я думаю, что файл читаем   -  person Saurabh Gour    schedule 22.04.2016
comment
пожалуйста, напечатайте image.exists(). если это не существует, он не будет генерировать исключение, но метод exists() вернет false.   -  person Mojtaba Safaeian    schedule 22.04.2016
comment
@SaurabhGour, new File(some_file) не создает исключение, если файл находится не в ожидаемом месте. Просто распечатать что-то не помогает. Вы должны явно проверить if (! image.exists()) { display error }.   -  person KevinO    schedule 22.04.2016
comment
@KevinO ... Изображение было нечитаемым ... Теперь я указал абсолютный путь, но получил другое исключение java.lang.Error: Недопустимый доступ к памяти   -  person Saurabh Gour    schedule 22.04.2016
comment
пожалуйста, обновите свой вопрос или опубликуйте новый вопрос, и, пожалуйста, используйте форматирование.   -  person Mojtaba Safaeian    schedule 22.04.2016
comment
Привет @KevinO .. спасибо .. изменение пути к изображению на абсолютный сработало !!   -  person Saurabh Gour    schedule 22.04.2016


Ответы (1)


Я думаю, что ваш текущий каталог отличается, когда вы звоните из сервлета. текущий каталог - это ваша папка bin tomcat. поэтому, когда вы звоните так:

File image = new File("Scan0008.jpg");

ваш scan0008.jpg должен быть помещен в папку bin tomcat или вы должны использовать абсолютный путь к вашему файлу.

person Mojtaba Safaeian    schedule 22.04.2016
comment
Я также пытался указать абсолютный путь ... но он не работает ... все еще получаю исключение. Файл вроде читается - person Saurabh Gour; 22.04.2016
comment
пожалуйста, проверьте image.exists(), чтобы увидеть, существует ли он - person Mojtaba Safaeian; 22.04.2016
comment
Привет, Моджтаба, его не существует. Я попытался указать абсолютный путь... теперь изображение можно прочитать... но теперь я получаю это исключение: ‹java.lang.Error: Invalid memory access - person Saurabh Gour; 22.04.2016
comment
Да, это должно работать, вы можете ввести это неправильно. Пожалуйста, проверьте свой абсолютный адрес - person Mojtaba Safaeian; 22.04.2016
comment
Привет, Моджтаба.. другое исключение было решено здесь /19894890/.. Спасибо за ваше время :) - person Saurabh Gour; 22.04.2016