Вам необходимо изменить целевую структуру текущего проекта с .Net 4 на .Net 4.5.
Похоже, вы изменили конфигурацию Tomcat.
Либо вы изменили конфигурацию на al {0,1} [iu] n [iu] x, либо установили на виртуальная машина с другим контролем безопасности, чем та, на которой вы ее тестируете.
По-видимому,
GraphicsEnvironment.getLocalGraphicsEnvironment()
пытается получить доступ к свойству: java.awt.graphicsenv
, которое может возвращать значение null или какое-то несуществующее имя класса, которое затем загружается и вызывает исключение ClassNotFoundException. 1
Кажется, решение заключается в указании свойства "java.awt.headless".
Это похожий вопрос: java.awt.Color error
Попробуйте выполнить этот поиск , он показывает ситуации, похожие на ваш.
Я помню, что что-то было в базе данных ошибок Sun.
Опубликуйте решение, когда найдете его!
РЕДАКТИРОВАТЬ
Это не затмение !!
В моем исходном посте есть ссылка на исходный код класса, который генерирует исключение.
Поскольку мне кажется, что вы скучаете по нему, я отправлю вам его здесь:
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"
. Если в другом проекте, использующем ось, нет такой же проблемы, это может быть связано с тем, что он может работать в другой конфигурации tomcat или библиотека оси разрешила доступ к этой собственности. Но мы не можем быть уверены. Это чистое предположение. Так почему бы вам не проверить следующее и не посмотреть, что будет напечатано:
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).
Выполняется код (который я только что опубликовал), а затем следует понять, что он делает и как работает весь этот "AccessController.doPrivileged". (Для этого вы можете использовать Google + StackOverflow). Выполняется код (который я только что опубликовал), а затем следует понять, что он делает и как работает весь этот "AccessController.doPrivileged". (Для этого вы можете использовать Google + StackOverflow).Он был запущен неделю назад, а теперь его нет.
ПОЭТОМУ ВЫ ИЗМЕНИЛИ ЧТО-ТО МЕЖДУ "работает" и "не работает".
Вернитесь к рабочей конфигурации (если можете) и внимательно отслеживайте, что вы изменили. Если у вас нет резервной копии рабочей конфигурации, тщательно просмотрите все, что вы делали между рабочим и нерабочим, пока не найдете то, что вы изменили.
Это может быть не код - это может быть конфигурация файл и т. д.
Удачи,
-R
Если вы развертываете это на * nix, и у вас больше не работает оконная система X, это может объяснить это. Даже если вы это сделаете, если вы не экспортируете системную переменную DISPLAY в процесс, который запускает JVM, или если да, но на самом деле она недействительна, это может вызвать такую проблему.
Это, по крайней мере, объяснит, почему вы не изменили конфигурацию в tomcat, но проблема все еще есть.
На этом сервере запущена Java в режиме сервера - я слышал, что это не загружается в классах AWT.
Если ваш NoClassDefFoundError
вообще не имеет сообщения, это означает две вещи:
статическим
полям и запустить любые статические {}
блоки. Часто это происходит потому, что классы, необходимые для этой статической инициализации, отсутствуют. Кажется, что проблемным классом является тот, имя которого является значением системного свойства java.awt.graphicsenv
. Я бы начал с выяснения стоимости этой собственности.