gpt4 book ai didi

Java:无法使用 'localhost:1.0' 作为 DISPLAY 变量的值连接到 X11 窗口服务器

转载 作者:太空宇宙 更新时间:2023-11-04 03:55:17 25 4
gpt4 key购买 nike

我创建了一个 Web 应用程序,它利用 JOptionPane 向用户显示一些对话框,例如“未找到记录等”。我在 Windows 中进行了此开发,一切正常。

然后我被要求在远程服务器上部署项目 war ,该服务器是没有任何 GUI 的 RHEL 机器(类似于 AWS 机器)。当我在那里运行我的应用程序时,只要有 JOptionPane 语句,我都会收到下面提到的异常。

线程“http-bio-8080-exec-6”中出现异常 java.lang.InternalError:无法使用“localhost:1.0”作为 DISPLAY 变量的值连接到 X11 窗口服务器。 在 sun.awt.X11GraphicsEnvironment.initDisplay( native 方法) 在 sun.awt.X11GraphicsEnvironment.access 200 美元(X11GraphicsEnvironment.java:62) 在 sun.awt.X11GraphicsEnvironment$1.run(X11GraphicsEnvironment.java:178) 在 java.security.AccessController.doPrivileged( native 方法) 在 sun.awt.X11GraphicsEnvironment。(X11GraphicsEnvironment.java:142) 在 java.lang.Class.forName0( native 方法) 在 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)

我已经尝试过使用导出DISPLAY也尝试过

System.setProperty("java.awt.headless", "true");
boolean headless = GraphicsEnvironment.isHeadless();

但是我的问题还没有解决吗?有任何输入吗?我不应该在 Web 应用程序中使用 JOptionPane 吗?如果没有那么更好的选择是什么? JOption 的替代品?

最佳答案

您绝对不能在 Web 应用程序中使用 JOptionPane。并且甚至不要考虑在 Swing 中使用任何其他 JWhatever 类。

JOptionPane 和其他各种 Swing 组件仅出现在运行它们的计算机上。因此,即使您能够克服遇到的异常,并以某种方式显示 JOptionPane,JOptionPane 也会出现在服务器1上。 它不会出现在用户的浏览器中,因此用户不会看到它。

那么,假设这个 JOptionPane 已经出现在服务器上。用户应该如何阅读或忽略它?他们只能访问自己的浏览器。

简单的答案是他们不能。

更糟糕的是,JOptionPanes 是模态的,因为创建它们的调用只有在对话框关闭后才会返回。如果用户输入的型号不存在,您的 Web 应用程序将显示为挂起,因为在 JOptionPane 关闭之前它无法完成页面服务。随着越来越多的用户使用您的系统,整个应用程序最终将陷入停顿,因为越来越多的 Web 应用程序的工作线程陷入等待 JOptionPanes 被关闭的状态。

相反,您需要以某种方式将错误消息发送回浏览器。

如果用户输入的型号不存在,我建议重定向回输入型号的页面,并在此页面上显示一条消息,让用户清楚地知道他们被重定向回,因为他们输入了不存在的型号。

您的代码可能在您的计算机上运行正常,但这只是因为您从运行 Web 服务器的同一台计算机上浏览 Web 应用程序。

1:从技术上讲,如果您的客户端计算机上有 X 服务器并且可以按照 Jim Garrison 的描述进行设置,那么您可以向客户端显示此 JOptionPane,但这绝对不是您可以假设的事情。

关于Java:无法使用 'localhost:1.0' 作为 DISPLAY 变量的值连接到 X11 窗口服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24962302/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com