gpt4 book ai didi

java - 在 Tomcat 上访问 GraphicsEnvironment.getLocalGraphicsEnvironment 时出现 NoClassDefFoundError

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:46:37 24 4
gpt4 key购买 nike

我有一个在 tomcat 上运行的应用程序,其中一种方法是从 jpeg 图像创建一个简单的缩略图。这些功能离线运行良好,一周前在 tomcat 上也运行良好。但是现在我收到以下错误:

java.lang.NoClassDefFoundError
java.lang.Class.forName0(Native Method)
java.lang.Class.forName(Class.java:164)
java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:68)
java.awt.image.BufferedImage.createGraphics(BufferedImage.java:1141)
eval.impl.ImageEval.getThumbnail(ImageEval.java:155)
eval.impl.ImageServlet.doGet(ImageServlet.java:79)
javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

我认为我没有改变任何应该影响这个的东西(实际上我根本没有根据 svn 存储库改变功能),所以它一定是一个库问题。但我无法弄清楚缺少什么。以下是 getThumbnail 函数中发生错误的实际行:

        BufferedImage thumbImage = new BufferedImage(thumbWidth, 
thumbHeight, BufferedImage.TYPE_INT_RGB);
Graphics2D graphics2D = thumbImage.createGraphics();
graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BILINEAR);
graphics2D.drawImage(simage, 0, 0, thumbWidth, thumbHeight, null);

[edit] 我决定稍微更新一下问题描述。是的,他似乎无法从 java.awt 中找到某个类或与之相关的类。但它们确实存在于jvm 中的服务器上。 Java headless 模式不能解决问题。在另一个项目中,完全相同的代码,但在此服务器上的 axis2 web 服务中工作正常。[/编辑]

最佳答案

看来你已经更改了 Tomcat 的配置。

要么您已更改为 l{0,1}[iu]n[iu]x 框,要么安装在与您测试它的安全控制不同的虚拟机上。

显然是

 GraphicsEnvironment.getLocalGraphicsEnvironment()

正在尝试访问属性:java.awt.graphicsenv

这可能会返回 null 或一些不存在的类名,然后加载这些类名并抛出 ClassNotFoundException。 1

解决方案似乎是指定“java.awt.headless”属性。

这是一个类似的问题:java.awt.Color error

试试这个 search , 它显示与您类似的情况。

我记得太阳虫数据库里也有一些东西。

找到解决方案后发布!

<子>1。 GraphicsEnvironment.java

编辑

这不是 eclipse !!

在我的原始帖子中,有一个指向引发异常的类的源代码的链接。

既然我看起来你想念它,我会在这里为你张贴:

       public static synchronized GraphicsEnvironment getLocalGraphicsEnvironment() {
if (localEnv == null) {
// Y O U R E R R O R O R I G I N A T E S H E R E !!!
String nm = (String) java.security.AccessController.doPrivileged
(new sun.security.action.GetPropertyAction
("java.awt.graphicsenv", null));

try {
// long t0 = System.currentTimeMillis();
localEnv =
(GraphicsEnvironment) Class.forName(nm).newInstance();
// long t1 = System.currentTimeMillis();
// System.out.println("GE creation took " + (t1-t0)+ "ms.");
if (isHeadless()) {
localEnv = new HeadlessGraphicsEnvironment(localEnv);
}
} catch (ClassNotFoundException e) {
throw new Error("Could not find class: "+nm);
} catch (InstantiationException e) {
throw new Error("Could not instantiate Graphics Environment: "
+ nm);
} catch (IllegalAccessException e) {
throw new Error ("Could not access Graphics Environment: "
+ nm);
}
}

return localEnv;
}

这就是执行的内容。

在您似乎没有阅读的原始帖子中,我说代码正在访问属性“java.awt.graphicsenv”

如果使用 axis 的其他项目没有同样的问题,可能是因为它可能在不同的 tomcat 配置中运行,或者 axis 库允许访问该属性。但我们不能确定。那纯粹是猜测。那么为什么不测试以下内容并查看打印的内容:

        String nm = (String) java.security.AccessController.doPrivileged
(new sun.security.action.GetPropertyAction
("java.awt.graphicsenv", null));

System.out.println("java.awt.graphicsenv = " + nm );

它打印 null 然后你现在是什么问题了。您的系统中没有该属性,或者安全性禁止您使用它。

很难从这里告诉你:“去编辑文件 xyz 并添加:fail = false”所以你必须做你的工作并尝试找出真正的原因是什么。

首先研究正在执行的代码是什么(我刚刚发布),然后了解它的作用以及所有“AccessController.doPrivileged”的工作原理。 (您可以为此使用 Google + StackOverflow)。

关于java - 在 Tomcat 上访问 GraphicsEnvironment.getLocalGraphicsEnvironment 时出现 NoClassDefFoundError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/951948/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com