【发布时间】:2014-09-17 16:42:28
【问题描述】:
我创建了一个 Web 应用程序,它利用 JOptionPane 向用户显示一些对话框,例如“找不到记录等”。我在 Windows 中进行了这项开发,一切正常。
然后我被要求在远程服务器上部署项目战争,这是一台没有任何 GUI 的 RHEL 机器(类似于 AWS 机器)。当我在那里运行我的应用程序时,只要有 JOptionPane 语句,就会出现下面提到的异常。
线程 "http-bio-8080-exec-6" java.lang.InternalError 中的异常:无法使用 'localhost:1.0' 作为 DISPLAY 变量的值连接到 X11 窗口服务器。 在 sun.awt.X11GraphicsEnvironment.initDisplay(本机方法) 在 sun.awt.X11GraphicsEnvironment.access$200(X11GraphicsEnvironment.java:62) 在 sun.awt.X11GraphicsEnvironment$1.run(X11GraphicsEnvironment.java:178) 在 java.security.AccessController.doPrivileged(本机方法) 在 sun.awt.X11GraphicsEnvironment.(X11GraphicsEnvironment.java:142) 在 java.lang.Class.forName0(本机方法) 在 java.lang.Class.forName(Class.java:188) 在 java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:82) 在 sun.swing.SwingUtilities2.isLocalDisplay(SwingUtilities2.java:1393) 在 javax.swing.plaf.metal.MetalLookAndFeel.initComponentDefaults(MetalLookAndFeel.java:1563) 在 javax.swing.plaf.basic.BasicLookAndFeel.getDefaults(BasicLookAndFeel.java:147) 在 javax.swing.plaf.metal.MetalLookAndFeel.getDefaults(MetalLookAndFeel.java:1599) 在 javax.swing.UIManager.setLookAndFeel(UIManager.java:530) 在 javax.swing.UIManager.setLookAndFeel(UIManager.java:570) 在 javax.swing.UIManager.initializeDefaultLAF(UIManager.java:1320) 在 javax.swing.UIManager.initialize(UIManager.java:1407) 在 javax.swing.UIManager.maybeInitialize(UIManager.java:1395) 在 javax.swing.UIManager.getDefaults(UIManager.java:644) 在 javax.swing.UIManager.getString(UIManager.java:790) 在 javax.swing.UIManager.getString(UIManager.java:807) 在 javax.swing.JOptionPane.showMessageDialog(JOptionPane.java:610)
我已经试过用export DISPLAY也试过了
System.setProperty("java.awt.headless", "true");
boolean headless = GraphicsEnvironment.isHeadless();
但我的问题仍未解决?有输入吗?我不应该在 Web 应用程序中使用 JOptionPane 吗?如果不是那么什么是更好的选择? JOption 的替代品?
【问题讨论】:
-
我认为 webapp 向用户提供的任何反馈都是基于 web 的(jsp、jsf 等)
-
如果这是一个 Web 应用程序,通过浏览器访问,那么任何使用显示的尝试都将发生在服务器上。您不能在客户端远程显示 Java GUI,除非客户端运行了 X 服务器并且 Web 服务器可以启动到客户端的 X 连接。这是一个非常非典型的设置,在一般情况下不起作用。您需要提供更详细的说明来说明您要达到的目标。
-
我有一个 jsp 页面,它接受用户的输入(型号)...jsp 页面然后调用 servlet...然后调用一个 java 方法,该方法在打开数据库连接后进行检查型号是否存在......如果不存在,则显示 JOptionPane 窗口(显示:“型号不存在”)并将用户重定向到输入型号的页面......如果型号存在,则重定向到包含型号详细信息的页面...我希望这能说明我为什么使用 JOptionPane
-
@Jim Garrison....你能建议一个替代品来代替 JOptionPane 吗? ...其余代码在 linux 机器上运行良好,我现在已经明白这可能不是一个简单的解决方案....仍然想尝试一下...欢迎所有建议。
-
基本架构存在根本缺陷。服务器和客户端之间的所有流量都应该通过 HTTP 连接,并且您正在尝试建立从服务器返回客户端的第二个通道。如果 1) 客户端没有运行 X 服务器,则会中断; 2) 客户端的防火墙未配置为允许 X 流量进入。无论如何,使用
localhost将永远不会起作用。当服务器和客户端不是同一台机器时,localhost指的是 SERVER。
标签: java linux joptionpane