我正在尝试迁移一个java应用程序,该应用程序包含一些从Windows到Linux的图形图表,但我得到了以下异常:
java.awt.HeadlessException:
No X11 DISPLAY variable was set, but this program performed an operation which requires it.
at java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:159)
at java.awt.Window.<init>(Window.java:432)
at java.awt.Frame.<init>(Frame.java:403)
at java.awt.Frame.<init>(Frame.java:368)
at javachart.servlet.Bean.makeURLImage(Unknown Source)
at javachart.applet.ParameterParser.makeURLImage(Unknown Source)
at javachart.applet.ParameterParser.populateGc(Unknown Source)
at javachart.applet.ParameterParser.getDatasetPropertiesFromParameters(Unknown Source)
at javachart.applet.ParameterParser.getDatasetParameters(Unknown Source)
at javachart.applet.ParameterParser.getDataset(Unknown Source)
at javachart.applet.ParameterParser.getDatasets(Unknown Source)
at javachart.applet.ParameterParser.getOptions(Unknown Source)
at javachart.servlet.Bean.getOptions(Unknown Source)
at javachart.servlet.labelLineApp.init(Unknown Source)
at javachart.servlet.Bean.buildChart(Unknown Source)
at javachart.servlet.Bean.generate(Unknown Source)
at javachart.servlet.Bean.getFileName(Unknown Source)
at org.apache.jsp.www.SaveHtml.chartByHotelSNS_jsp._jspService(chartByHotelSNS_jsp.java:676)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:369)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:322)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:249)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:235)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:829)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:598)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:662)
我也试过通过Putty设置Display环境变量但是也没有用
谁能告诉我问题到底在哪里?
它是在应用程序还是linux方面?
答案 0 :(得分:0)
我相信,你的问题的根本原因是linux服务器没有安装X11,另一方面你运行的代码使用图形环境,或者至少你的图形输出没有正确配置。
我认为this文章在这种情况下很有用。 此外,Alex K提供的链接也可以作为您问题的答案。
祝你好运!
答案 1 :(得分:0)
你需要以某种方式设置System.setProperty(“java.awt.headless”,“true”);
告诉服务器团队使用额外的命令行参数
启动他们开始的Javajava -Djava.awt.headless=true
答案 2 :(得分:0)
设置以下sytem属性(如果安装了X11):
DISPLAY=:0.0
export DISPLAY
或者启动自己的虚拟X11服务器。例如:
vncserver :1
export DISPLAY=:1
或者查看Xvfb