该解决方案似乎正在指定"java.awt.headless"属性.这是一个类似的问题: java.awt.Color错误尝试以下搜索,它显示与您类似的情况.我记得sun bugs数据库中也有一些东西.找到解决方案后将其发布! 1. GraphicsEnvironment.java 编辑这不是日食!在我的原始帖子中,有一个指向引发异常的类源代码的链接.因为我看起来像您想念它,所以我会在这里为您发布: 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).I have an application which is running on tomcat, one of the methods is, creating a simple thumbnail from an jpeg image. The functions works fine offline and a week ago also on tomcat. But now i get the following error:java.lang.NoClassDefFoundErrorjava.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)I don't think that i have change anything what should influence this (actually i didn't change the function at all according to the svn repository), so it must be a library problem. But i can't figure out what is missing.Here are the actual lines from the getThumbnail function, where the error occures: 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] I decided to update the problem description a little.Yes it seems that he can not find some class from java.awt or one related to that. But they do exist on the server in the jvm. Java headless mode doesn't solve the problem.In another project the exact same code, but inside an axis2 webservice on this server is working fine.[/edit] 解决方案 It seems like you've change the configuration of Tomcat.Either you've changed to a l{0,1}[iu]n[iu]x box or installed on a virtual machine with different security control than the one where you test it.Apparently the GraphicsEnvironment.getLocalGraphicsEnvironment()Is trying to access the property: java.awt.graphicsenvWhich may return null or some non existing class name which is then loaded and throws the ClassNotFoundException.The solution seems to be specifying the "java.awt.headless" property.This is a similar question: java.awt.Color errorTry this search , it shows similar situations as your.I remember there was something in the sun bugs database too.Post the solution when you find it!1.GraphicsEnvironment.javaEDITIt is not eclipse!!In my original post there is a link to the source code of the class which is throwing the exception.Since I looks like you miss it, I'll post it here for you: 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; }That's what gets executed.And in the original post which you don't seem to have read, I said the code is accessing the property "java.awt.graphicsenv"If that other project using axis doesn't have the same problem it may be because it may be running in a different tomcat configuration or the axis library allowed the access to that property. But we cannot be sure. That's pure speculation. So why don't you test the following and see what gets printed: String nm = (String) java.security.AccessController.doPrivileged (new sun.security.action.GetPropertyAction ("java.awt.graphicsenv", null)); System.out.println("java.awt.graphicsenv = " + nm );It it prints null then you now what the problem is. You don't have that property in your system, or the security forbids you do use it.It is very hard to tell you from here: "Go and edit file xyz and add : fail = false" So you have to do your work and try to figure out what's the real reason.Start by researching what's the code being executed is ( which I have just posted ) and follow by understand what it does and how does all that "AccessController.doPrivileged" works. (You may use Google + StackOverflow for that). 这篇关于在Tomcat上访问GraphicsEnvironment.getLocalGraphicsEnvironment时发生NoClassDefFoundError的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持! 上岸,阿里云!