3 votes

Java exception- Exception dans le thread "main" java.lang.NoClassDefFoundError: net/sourceforge/tess4j/Tesseract

Je tente de faire fonctionner les choses avec tess4j (algorithme OCR), et j'utilise ce code :

import java.awt.image.RenderedImage;
import java.io.File;
import java.net.URL;

import javax.imageio.ImageIO;
import net.sourceforge.tess4j.*;

public static void main(String[] args) throws Exception{

    URL imageURL = new URL("http://s4.postimg.org/e75hcme9p/IMG_20130507_190237.jpg");

    RenderedImage img = ImageIO.read(imageURL);
    File outputfile = new File("saved.png");
    ImageIO.write(img, "png", outputfile);

    try {
    Tesseract instance = Tesseract.getInstance(); // JNA Interface Mapping

    //   Tesseract1 instance = new Tesseract1(); // JNA Direct Mapping

        String result = instance.doOCR(outputfile);
        System.out.println(result);

    } catch (Exception e) {
        System.err.println(e.getMessage());
    }

}

Lorsque je l'exécute dans Eclipse (juno-64bit) cela fonctionne parfaitement !

Mais depuis la ligne de commande, j'obtiens cette exception :

Exception in thread "main" java.lang.NoClassDefFoundError: net/sourceforge/tess4j/Tesseract
    at SimpleQueueServiceSample.testOCR(SimpleQueueServiceSample.java:73)
    at SimpleQueueServiceSample.main(SimpleQueueServiceSample.java:57)Caused by: java.lang.ClassNotFoundException: net.sourceforge.tess4j.Tesseract
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    ... 2 more

Dans mon chemin de compilation, j'ai les bon fichiers jars :

tess4j.jar
jai_imageio.jar

Après cela, j'exporte un simple fichier jar (les jars sont cochés dans 'order and export' dans le chemin de compilation) et exécute mon code :

java -jar manager.jar

S'il vous plaît aidez-moi !

2voto

Jon Skeet Points 692016

Votre manifeste de fichier jar devrait inclure une entrée Class-Path :

Class-Path: tess4j.jar jai_imageio.jar

Ces fichiers jar doivent ensuite être placés dans le même répertoire que votre fichier jar au moment de l'exécution, afin qu'ils puissent être chargés correctement.

À ce stade, tout devrait bien se passer. Mais sans cette entrée dans le manifeste, il n'y a rien pour connecter votre fichier jar avec les autres fichiers jar sur lesquels il dépend.

0voto

Dima Points 4800

Vous emballez le fichier de la mauvaise manière, vos dépendances ne sont pas dans le jar

0voto

AtulS Points 1

Où est votre classe ? Vous avez oublié d'écrire la classe. À l'intérieur de la classe, il devrait y avoir public static void main(String args[]) et pour compiler instance Tesseract = Tesseract.getInstance();

Vous aurez besoin de tess4j.jar dans le chemin de construction.

0voto

songgeb Points 64

Si votre système d'exploitation est Windows, libtesseract304.dll (utilisé pour l'OCR) est construit avec VC2013, donc vous avez besoin d'autres fichiers système dll. Téléchargez-les ici.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X