JAVA - странная ошибка NoClassDefFoundEr: com / lowagie / textDocumentException - PullRequest
0 голосов
/ 11 февраля 2010

Это ситуация. Мне нужно добавить генерацию PDF в программу, которая уже имеет генерацию PNG. Изначально задействованы 2 класса: ActionUsuels Откуда вызывается конструктор CaptureImage3D.

Когда я добавил поколение PDF, я добавил метод в классе CaptureImage3D. Перед добавлением генерации PDF, генерация PNG работала правильно. Но теперь, когда я пытаюсь выполнить генерацию PNG, я получаю: NoClassDefFoundError: com/lowagie/text/DocumentException.

Я знаю, это означает, что класс: DocumentException (из файла itext jar) нельзя прочитать из пути к классам, но:

  1. Метод создания PDF НИКОГДА не вызывается.
  2. Исключение генерируется перед вводом конструктора CaptureImage3D.
  3. Рассмотрим следующий метод создания PDF:

Code:

  public void captureImagePDF(File imageFile)
  {

        System.out.println("Pdf appelé");

        // Dimension (en pixels) de l'image a sauvegarder dans le fichier
        Dimension dim = new Dimension(512, 512);

        // On recupere l'image (pixmap) rendue par le canvas 3D offscreen
        BufferedImage myBufferedImage = offScreenCanvas.getOffScreenImage(dim);

        // On recupere le contexte graphique de l'image finale de sortie
        Graphics2D gc = myBufferedImage.createGraphics();

        gc.drawImage(myBufferedImage, 0, 0, null);

        Document myPDF = new Document(PageSize.A4, 50, 50, 50, 50);

        PdfWriter myWriter = null;

        try 
        {
            myWriter = PdfWriter.getInstance(myPDF, new FileOutputStream(imageFile));
        } 


        catch (FileNotFoundException e) 
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 

        catch (DocumentException e) 
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }


        myPDF.open();
        PdfContentByte cb = myWriter.getDirectContent();
        cb.saveState();
        Image image = null;

        try {
            image = Image.getInstance(myBufferedImage,null);
        } 

        catch (BadElementException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 

        catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        try {
                cb.addImage(image);
        } 
        catch (DocumentException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
        }


  }

Когда я комментирую все блоки try / catch, все работает отлично !!!

Я повторяю еще раз: captureImagePDF никогда не вызывается. И даже конструктор CaptureImage3D никогда не доступен. (так и должно быть, но исключение поднималось раньше). И да, у меня есть itext в пути к классам.

Мне кажется странным тот факт, что фрагмент кода, который никогда нигде не вызывается, вызывает появление исключения!

Не стесняйтесь спрашивать разъяснений!

Есть идеи?

Спасибо

1 Ответ

3 голосов
/ 11 февраля 2010

Тот факт, что у вас есть перехват для DocumentException, означает, что загрузчик должен загрузить класс, чтобы система могла его перехватить. : -)

Если вы хотите избежать наличия банки iText в вашем пути к классу, подхватите что-нибудь повыше или (как вы сказали) вообще не поймайте. : -Р

...