教育学的语言菜鸟 2021-11-24 09:37 采纳率: 0%
浏览 527
已结题

使用IDEA导入poi.5.1.0.jar以及poi.scratchedpad.5.1.0.jar进行PPT操作时出现NoClassDefFoundError 错误

  1. 问题情景:要求使用Java编写一个程序,实现类似于PPT播放器的功能。(导入相应的poi包,将PPT先转化为图片,然后在panel上画出对应张数的图片)。

  2. 未遇到问题前解决过程
    ①在http://poi.apache.org/download.html下载相应jar包;

img


②解压后导入如下两个包;

img


③在IDEA导入如图两个包,导入包的步骤正确;

img


④编写程序如下,将PPT转化图片操作参照http://poi.apache.org/components/slideshow/how-to-shapes.html

img

package cn.bnu.edu.qhx.zy03;

import org.apache.poi.hslf.usermodel.HSLFSlide;
import org.apache.poi.hslf.usermodel.HSLFSlideShow;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class PPT {
    public static void main(String[] args) {
        PPT ppt = new PPT();
        String property;
        property = System.getProperty("java.classpath");
        System.out.println(property);
        try {
            ppt.ReadPPTtoImg();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public void ReadPPTtoImg() throws IOException {
        HSLFSlideShow ppt;
        FileInputStream is = new FileInputStream("res/1_1.ppt");
        ppt = new HSLFSlideShow(is);

        Dimension pgsize = ppt.getPageSize();
        int idx = 1;
        for(HSLFSlide slide:ppt.getSlides()) {
            BufferedImage img = new BufferedImage(pgsize.width,pgsize.height,BufferedImage.TYPE_INT_RGB);
            Graphics2D graphics = img.createGraphics();
            graphics.setPaint(Color.white);
            graphics.fill(new Rectangle2D.Float(0,0,pgsize.width,pgsize.height));
            slide.draw(graphics);
            FileOutputStream out = new FileOutputStream("slide-" +idx + ".png");
            javax.imageio.ImageIO.write(img,"png",out);
            out.close();
            idx++;
        }
    }
}


⑤运行程序后出现如下问题:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/io/output/UnsynchronizedByteArrayOutputStream
    at cn.bnu.edu.qhx.zy03.PPT.ReadPPTtoImg(PPT.java:31)
    at cn.bnu.edu.qhx.zy03.PPT.main(PPT.java:21)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.io.output.UnsynchronizedByteArrayOutputStream
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:636)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:182)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:519)
    ... 2 more

Process finished with exit code 1

⑥根据报错提示,添加http://archive.apache.org/dist/commons/io/binaries/

img

img

⑦运行程序出现如下问题:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/logging/log4j/LogManager
    at org.apache.poi.POIDocument.<clinit>(POIDocument.java:65)
    at cn.bnu.edu.qhx.zy03.PPT.ReadPPTtoImg(PPT.java:31)
    at cn.bnu.edu.qhx.zy03.PPT.main(PPT.java:21)
Caused by: java.lang.ClassNotFoundException: org.apache.logging.log4j.LogManager
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:636)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:182)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:519)
    ... 3 more

⑧根据报错,再次添加缺少https://logging.apache.org/log4j/2.x/download.html,将图中目录下所有的包均导入;

img

img

⑨在次运行程序,出现如下问题:

Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/Logger
    at org.apache.logging.slf4j.SLF4JLoggerContext.getLogger(SLF4JLoggerContext.java:39)
    at org.apache.logging.log4j.spi.LoggerContext.getLogger(LoggerContext.java:99)
    at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:599)
    at org.apache.poi.POIDocument.<clinit>(POIDocument.java:65)
    at cn.bnu.edu.qhx.zy03.PPT.ReadPPTtoImg(PPT.java:31)
    at cn.bnu.edu.qhx.zy03.PPT.main(PPT.java:21)
Caused by: java.lang.ClassNotFoundException: org.slf4j.Logger
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:636)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:182)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:519)
    ... 6 more

⑩再次按报错导入相应https://repo1.maven.org/maven2/org/slf4j/slf4j-api/

img

img


11.再次运行程序出现如下问题:

Exception in thread "main" java.lang.ExceptionInInitializerError
    at cn.bnu.edu.qhx.zy03.PPT.ReadPPTtoImg(PPT.java:31)
    at cn.bnu.edu.qhx.zy03.PPT.main(PPT.java:21)
Caused by: org.apache.logging.log4j.LoggingException: log4j-slf4j-impl cannot be present with log4j-to-slf4j
    at org.apache.logging.slf4j.Log4jLoggerFactory.validateContext(Log4jLoggerFactory.java:49)
    at org.apache.logging.slf4j.Log4jLoggerFactory.newLogger(Log4jLoggerFactory.java:39)
    at org.apache.logging.slf4j.Log4jLoggerFactory.newLogger(Log4jLoggerFactory.java:30)
    at org.apache.logging.log4j.spi.AbstractLoggerAdapter.getLogger(AbstractLoggerAdapter.java:53)
    at org.apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:30)
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:285)
    at org.apache.logging.slf4j.SLF4JLoggerContext.getLogger(SLF4JLoggerContext.java:39)
    at org.apache.logging.log4j.spi.LoggerContext.getLogger(LoggerContext.java:99)
    at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:599)
    at org.apache.poi.POIDocument.<clinit>(POIDocument.java:65)
    ... 2 more

Process finished with exit code 1

最后,我不会调试了,彻底崩了,求问各位大,能否指出哪一步可能存在问题。

  • 写回答

2条回答 默认 最新

  • 教育学的语言菜鸟 2021-11-24 12:31
    关注

    问题已解决,原因是缺少commons.math3.jar包,具体下载网址http://archive.apache.org/dist/commons/math/binaries/

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月2日
  • 已采纳回答 11月24日
  • 修改了问题 11月24日
  • 修改了问题 11月24日
  • 展开全部

悬赏问题

  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作