use*_*155 94 java linux x11 variables headless
我正在尝试在我的Linux机器(Slackware)上安装Java应用程序.
我收到了以下错误,我不明白.
你能告诉我如何处理这个问题吗?谢谢.
这是我得到的:(我看到需要设置一些X11 DISPLAY变量,但我应该给它什么值以及如何?)
~$ java -jar gate-5.0-beta1-build3048-installer.jar
- ERROR -
java.awt.HeadlessException:
No X11 DISPLAY variable was set, but this program performed an operation which requires it.
java.awt.HeadlessException:
No X11 DISPLAY variable was set, but this program performed an operation which requires it.
at java.awt.GraphicsEnvironment.checkHeadless(Graphic sEnvironment.java:159)
at java.awt.Window.<init>(Window.java:407)
at java.awt.Frame.<init>(Frame.java:402)
at net.sourceforge.mlf.metouia.borders.MetouiaDotsBuf fer.<init>(MetouiaDotsBuffer.java:105)
at net.sourceforge.mlf.metouia.borders.MetouiaDots.<i nit>(MetouiaDots.java:66)
at net.sourceforge.mlf.metouia.borders.MetouiaToolBar Border.<init>(MetouiaToolBarBorder.java:49)
at net.sourceforge.mlf.metouia.MetouiaLookAndFeel.ini tComponentDefaults(MetouiaLookAndFeel.java:241)
at javax.swing.plaf.basic.BasicLookAndFeel.getDefault s(BasicLookAndFeel.java:130)
at javax.swing.plaf.metal.MetalLookAndFeel.getDefault s(MetalLookAndFeel.java:1591)
at javax.swing.UIManager.setLookAndFeel(UIManager.jav a:537)
at javax.swing.UIManager.setLookAndFeel(UIManager.jav a:581)
at com.izforge.izpack.installer.GUIInstaller.loadLook AndFeel(GUIInstaller.java:373)
at com.izforge.izpack.installer.GUIInstaller.<init>(G UIInstaller.java:116)
at sun.reflect.NativeConstructorAccessorImpl.newInsta nce0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInsta nce(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newI nstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Construc tor.java:513)
at java.lang.Class.newInstance0(Class.java:355)
at java.lang.Class.newInstance(Class.java:30
at com.izforge.izpack.installer.Installer.main(Instal ler.java:62)
Run Code Online (Sandbox Code Playgroud)
Pau*_*lin 107
如果你在主显示器上,那么
export DISPLAY=:0.0
Run Code Online (Sandbox Code Playgroud)
或者如果您使用的是csh或tcsh
setenv DISPLAY :0.0
Run Code Online (Sandbox Code Playgroud)
在运行您的应用之前.
实际上,我很惊讶它没有自动设置.您是否尝试从非图形终端启动此应用程序?如果没有,你修改了默认的.profile,.login,.bashrc或.cshrc吗?
请注意,将DISPLAY设置为:0.0,假设您正坐在主显示屏上,正如我所说,或者至少主显示屏已登录到您的用户ID.如果它没有登录,或者它是不同的用户ID,则会失败.
如果您从另一台机器进入,并且您在该机器的主显示器上并且它正在运行X,那么您可以使用"ssh -X hostname"连接到该主机,并且ssh将向后转发X显示器.ssh还将确保正确设置DISPLAY环境变量(假设它没有在我上面提到的各种点文件中搞乱).在"ssh -X"会话中,DISPLAY环境变量将具有类似"localhost:11.0"的值,该值将指向ssh正在隧道连接到本地盒的套接字.
Mik*_*age 10
你是在X11环境中运行吗?您可以使用终端窗口,但它必须在X之内(在图形登录之后,或通过运行startx).
如果你已经在一个图形环境中,尝试导出DISPLAY =:0表示bash,如shell(bash,sh等)或setenv DISPLAY:0表示基于C shell的shell(csh,tcsh等)
如果您通过SSH从另一台计算机连接,则使用-X选项在您所在的计算机上显示图形界面(前提是有一台X服务器在那里运行(例如xming for windows和标准Linux X)服务器).
你必须在你的PuTTy中启用X11转发
要打开PuTTy,请转到Connection => SSH => Tunnels并选中Enable X11 forwarding
另外sudo到服务器并导出下面的变量这里IP是你本地机器的IP
export DISPLAY=10.75.75.75:0.0
Run Code Online (Sandbox Code Playgroud)
如果您的应用程序有 GUI 或没有 GUI,则有两种可能性:
1-)如果你的java应用程序有GUI,首先确保你已经正常安装了jdk包(非headless)。例如,如果您安装了这个:
sudo apt install openjdk-19-jre-headless
Run Code Online (Sandbox Code Playgroud)
去掉它:
sudo apt remove openjdk-19-jre-headless
Run Code Online (Sandbox Code Playgroud)
然后安装普通版本:
sudo apt install openjdk-19-jre
Run Code Online (Sandbox Code Playgroud)
Simply headless 用于无 GUI 应用程序。您可以在这里查看更多信息:openjdk-6-jre、openjdk-6-jre-headless、openjdk-6-jre-lib 之间的区别
然后,尝试将DISPLAY变量设置为:
export DISPLAY=:0
Run Code Online (Sandbox Code Playgroud)
或者如果它不起作用(那么,可能您有多个显示器),请设置为:
export DISPLAY=:1
Run Code Online (Sandbox Code Playgroud)
然后运行你的jar文件:
java -jar gate-5.0-beta1-build3048-installer.jar
Run Code Online (Sandbox Code Playgroud)
2-)如果您的java应用程序没有GUI,当您运行应用程序时,您可以尝试java.awt.headless=true标记为:
java -Djava.awt.headless=true -jar gate-5.0-beta1-build3048-installer.jar
Run Code Online (Sandbox Code Playgroud)
有很多方法可以做到这一点。我做了以下对我来说方便的事情,并且总是工作正常。
在服务器上,生成 .Xauthority 文件并注意 DISPLAY 变量已经设置。
$ xauth 列表
$ xauth 添加
要测试它,请键入 xclock 或 xeyes
注意:要切换用户,请将 .Xauthority 文件复制到相应用户的主目录,并从该用户导出 DISPLAY 变量。