Не удалось инициализировать класс sun.awt.X11GraphicsEnvironment в Solaris.

Я сталкиваюсь с этой ошибкой при запуске моего установщика на машине Solaris:

Installing...
-------------

 [==================|==================|==================|==================]
 [---Invocation of this Java Application has caused an InvocationTargetException. This application will now exit. (LAX)

Stack Trace:
java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11GraphicsEnvironment
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:186)
        at java.awt.GraphicsEnvironment.createGE(GraphicsEnvironment.java:102)
        at java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:81)
        at sun.awt.X11FontManager.isHeadless(X11FontManager.java:487)
        at sun.awt.X11FontManager.getFontPath(X11FontManager.java:767)
        at sun.font.SunFontManager.getPlatformFontPath(SunFontManager.java:3288)
        at sun.font.SunFontManager$11.run(SunFontManager.java:3314)
        at java.security.AccessController.doPrivileged(Native Method)
        at sun.font.SunFontManager.loadFonts(SunFontManager.java:3310)
        at sun.awt.X11FontManager.loadFonts(X11FontManager.java:439)
        at sun.font.SunFontManager.findFont2D(SunFontManager.java:2347)
        at sun.font.SunFontManager.findFont2D(SunFontManager.java:2285)
        at java.awt.Font.getFont2D(Font.java:498)
        at java.awt.Font.getFamily(Font.java:1187)
        at java.awt.Font.getFamily_NoClientCode(Font.java:1161)
        at java.awt.Font.getFamily(Font.java:1153)
        at ZeroGrs.a(DashoA10*..)
        at ZeroGrs.a(DashoA10*..)
        at ZeroGrs.a(DashoA10*..)
        at ZeroGrs.a(DashoA10*..)
        at ZeroGrs.a(DashoA10*..)
        at ZeroGrs.a(DashoA10*..)
        at com.zerog.ia.installer.actions.InstallUninstaller.a(DashoA10*..)
        at com.zerog.ia.installer.actions.InstallUninstaller.d(DashoA10*..)
        at com.zerog.ia.installer.actions.InstallUninstaller.installSelf(DashoA10*..)
        at com.zerog.ia.installer.InstallablePiece.install(DashoA10*..)
        at com.zerog.ia.installer.actions.InstallDirectory.install(DashoA10*..)
        at com.zerog.ia.installer.actions.InstallDirectory.install(DashoA10*..)
        at com.zerog.ia.installer.InstallablePiece.install(DashoA10*..)
        at com.zerog.ia.installer.GhostDirectory.install(DashoA10*..)
        at com.zerog.ia.installer.InstallablePiece.install(DashoA10*..)
        at com.zerog.ia.installer.Installer.install(DashoA10*..)
        at com.zerog.ia.installer.LifeCycleManager.b(DashoA10*..)
        at com.zerog.ia.installer.LifeCycleManager.a(DashoA10*..)
        at com.zerog.ia.installer.Main.main(DashoA10*..)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:601)
        at com.zerog.lax.LAX.launch(DashoA10*..)
        at com.zerog.lax.LAX.main(DashoA10*..)

Я пытался настроить JAVA_OPTS с помощью -Djava.awt.headless=true, но это не работает!

У кого-нибудь есть другое решение проблемы?


person Deka    schedule 15.01.2014    source источник


Ответы (7)


Решил проблему. Это был мой профиль, где я установил свой ДИСПЛЕЙ на один хост, которого нет в живых. Я правильно поставил и все заработало.

$ export DISPLAY=

Or

$ unset DISPLAY

person Deka    schedule 21.02.2014
comment
export DISPLAY= что? Я не мог этого понять. Когда я echo $DISPLAY, это localhost:11.0. Что это должно быть? - person Mohammad Faisal; 08.10.2018
comment
больше, чем ответ на этот t#comment56198275_15068584">комментарий очень помог. - person Mohammad Faisal; 08.10.2018
comment
Работал и на дебиане. Спасибо - person corporateWhore; 12.11.2019

Попробуйте запустить этот код в конструкторе сервлета

System.setProperty("java.awt.headless", "true"); 

or

Используйте этот параметр в сценарии запуска сервера:

-Djava.awt.headless=true

Вот пример этой проблемы, задокументированный и объясненный в POI Apache, когда вы хотите создать лист со столбцами автоматического размера.

person Edgard Leal    schedule 30.01.2014
comment
Идеально. Исправлена ​​моя производственная проблема, которую я случайно получил однажды. Я попытался поставить System.setProperty(java.awt.headless, true); внутри одноэлементного класса приложения, который использует Wicket Framework, но это не потребовалось. Поэтому мы добавили его в setenv.sh, что помогло. - person eaglei22; 22.10.2014

Фактически,

-Djava.awt.headless=true

Не исправляет проблему, а обходит ее стороной. Проблема в том, что приложение, которое вы пытаетесь запустить, хочет работать с пользовательским интерфейсом в XWindows. Эта ошибка говорит о том, что Java-эквивалент «dll не найден» или «.so не найден». Библиотека, необходимая для этого, отсутствует в пути к классам JVM, который вы используете.

Проблема в том, что вы используете OpenJDK (или какую-то другую версию Java, например Jikes), а awt был одной из частей Java, исходный код которой не мог быть открытым по причинам лицензирования. Итак, этот класс специально не существует и никогда не будет в OpenJDK.

Объявив

-Djava.awt.headless=true

Вы запускаете его в режиме командной строки, и не все приложения могут это сделать. В вашем случае вам сошло с рук. Единственный способ на самом деле исправить эту проблему — добавить этот класс и все его зависимые классы в путь к классам. Самый простой способ сделать это — переключиться на Sun JRE.

person Christian Bongiorno    schedule 30.12.2014
comment
groups.google.com/forum/#!topic/railo/49KLaaXkdrs - в соответствии с этим, это могло произойти, если родные gui-библиотеки отсутствуют, и jdk пытается их использовать - person Kalpesh Soni; 26.01.2015
comment
Я Java-разработчик с 15-летним стажем. Ссылка, которую вы сказали, по существу говорит о том, что JVM пытается реализовать собственный рендеринг вместо использования собственных библиотек. Это тоже неправда (давно это было). Эта ошибка и тот факт, что она указывает на конкретную реализацию SUN MICROYSTEMS, ясно и неопровержимо указывает на то, что у вас есть .dll/so, которого нет в словах Java. Я предполагаю, что при правильных условиях возможно, что произошел сбой базовой собственной библиотеки и вызвал эту ошибку, но очень маловероятно. Для этого существует специальная ошибка: UnsatisfiedLinkError, которая здесь не произошла. - person Christian Bongiorno; 27.01.2015
comment
jvm пытается использовать нативную библиотеку для x11 и не может ее найти/создать экземпляр - точная обработка ошибок, очевидно, будет зависеть от того, как Sun написал код - person Kalpesh Soni; 27.01.2015

У меня была такая же проблема с моим сервером Linux. Я не знаю, какое волшебство произошло, проблема была прекрасно решена путем установки Xorg на мою машину с Linux.

sudo apt-get install xorg openbox
person Chenhai-胡晨海    schedule 02.01.2018
comment
У меня была такая же проблема при использовании gnome, но по какой-то причине, если я вхожу в систему с помощью gnome xorg, все работает как задумано. - person marcogmonteiro; 14.10.2019

убедитесь, что вы не изменили имя хоста, и после этого возникла эта проблема, если это так, то проблема связана с именем хоста.

person raviteja katari    schedule 19.01.2018
comment
Это был мой случай. Я изменил свое имя хоста, и эта проблема начала возникать в Debian 6. Она была решена после выхода из системы и повторного входа в систему. Любые идеи относительно того, почему это происходит? - person dvlcube; 11.08.2018

Обычно программа начинает активировать безголовый режим, сообщая программе, что теперь вам нужно работать в безголовом режиме, не ждите, что аппаратное обеспечение поможет, вы должны быть самостоятельными, полагаясь на вычислительную мощность системы. имитировать эти функции:

System.setProperty("java.awt.headless","true");

Отредактируйте файл ${TOMCAT_HOME}/bin/catalina.sh или ${TOMCAT_HOME}/bin/catalina.bat:

Во всем аналогичном коде ниже:

"$_RUNJAVA" $JAVA_OPTS $CATALINA_OPTS \ 
-Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" -classpath "$CLASSPATH" \ 
-Djava.security.manager \ 
-Djava.security.policy=="$CATALINA_BASE"/conf/catalina.policy \ 
-Dcatalina.base="$CATALINA_BASE" \ 
-Dcatalina.home="$CATALINA_HOME" \ 
-Djava.io.tmpdir="$CATALINA_TMPDIR" \

Добавьте предложение в конце:

-Djava.awt.headless=true \

Пересмотренное содержание выглядит следующим образом:

Exec "$_RUNJAVA" $JAVA_OPTS $CATALINA_OPTS \ 
-Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" -classpath "$CLASSPATH" \ 
-Dcatalina.base="$CATALINA_BASE" \ 
-Dcatalina.home="$CATALINA_HOME" \ 
-Djava.io.tmpdir="$CATALINA_TMPDIR" \ 
-Djava.awt.headless=true \

Непосредственно найдите строку -Djava.io.tmpdir="$CATALINA_TMPDIR" и добавьте ее под этой строкой:

-Djava.awt.headless=true \

Всего есть семь мест, которые можно решить после перезапуска.

person user2737538    schedule 31.01.2019

Если рассматриваемый установщик (который не работает с этой ошибкой) на самом деле может быть основан на install4j, обратите внимание, что простым решением является использование флага -c, поэтому:

./myinstaller.sh

становится:

./myinstaller.sh -c

У меня была та же ошибка, что упоминалась здесь изначально, и в Linux, а не в Solaris, и хотя в Интернете есть много предложений, таких как здесь и другие, мне повезло, что в моем случае это действительно было просто, как добавить это -c .

Подробнее здесь: https://www.ej-technologies.com/resources/install4j/help/doc/installers/installerModes.html#console

person charlie arehart    schedule 24.10.2020