NoClassDefFoundError при доступе к GraphicsEnvironment.getLocalGraphicsEnvironment на Tomcat

Вам необходимо изменить целевую структуру текущего проекта с .Net 4 на .Net 4.5.

6
задан OscarRyz 5 June 2009 в 18:22
поделиться

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.

Опубликуйте решение, когда найдете его!

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"

. Если в другом проекте, использующем ось, нет такой же проблемы, это может быть связано с тем, что он может работать в другой конфигурации 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).

7
ответ дан 8 December 2019 в 13:48
поделиться

Он был запущен неделю назад, а теперь его нет.

ПОЭТОМУ ВЫ ИЗМЕНИЛИ ЧТО-ТО МЕЖДУ "работает" и "не работает".

Вернитесь к рабочей конфигурации (если можете) и внимательно отслеживайте, что вы изменили. Если у вас нет резервной копии рабочей конфигурации, тщательно просмотрите все, что вы делали между рабочим и нерабочим, пока не найдете то, что вы изменили.

Это может быть не код - это может быть конфигурация файл и т. д.

Удачи,

-R

3
ответ дан 8 December 2019 в 13:48
поделиться

Если вы развертываете это на * nix, и у вас больше не работает оконная система X, это может объяснить это. Даже если вы это сделаете, если вы не экспортируете системную переменную DISPLAY в процесс, который запускает JVM, или если да, но на самом деле она недействительна, это может вызвать такую ​​проблему.

Это, по крайней мере, объяснит, почему вы не изменили конфигурацию в tomcat, но проблема все еще есть.

1
ответ дан 8 December 2019 в 13:48
поделиться

На этом сервере запущена Java в режиме сервера - я слышал, что это не загружается в классах AWT.

1
ответ дан 8 December 2019 в 13:48
поделиться

Если ваш NoClassDefFoundError вообще не имеет сообщения, это означает две вещи:

  1. JVM уже попыталась загрузить класс и не смогла. Обычно это означает, что JVM не удалось выполнить статическую инициализацию для этого класса, т.е. присвоить значения каким-либо статическим полям и запустить любые статические {} блоки. Часто это происходит потому, что классы, необходимые для этой статической инициализации, отсутствуют.
  2. Вы используете Java 5, а не Java 6. (В Java 6 вы получаете сообщение «Не удалось инициализировать класс xyz 'вместо этого.)

Кажется, что проблемным классом является тот, имя которого является значением системного свойства java.awt.graphicsenv . Я бы начал с выяснения стоимости этой собственности.

0
ответ дан 8 December 2019 в 13:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: