我的学校项目都是在Linux服务器上完成的,都是通过命令行完成的,没有图形用户界面。我的一个Java项目要求我创建一个Java图形用户界面,并能够在GL服务器上构建和运行该项目。
我很困惑,因为GL服务器都是命令行,但我的教授说这是可以做到的。
要连接到学校的GL服务器,我使用Putty。我不知道这是否重要。我正在使用Java图形用户界面的Swing。我使用ANT来编译和运行,我的教授在给它评分时也会使用ANT。
我成功地构建了这个程序,但当我运行它时,会出现以下情况:
Buildfile: build.xml
run:
[java] Exception in thread "main" java.awt.HeadlessException:
[java] No X11 DISPLAY variable was set, but this program performed an operation which requires it.
[java] at java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:159)
[java] at java.awt.Window.<init>(Window.java:406)
[java] at java.awt.Frame.<init>(Frame.java:402)
[java] at javax.swing.JFrame.<init>(JFrame.java:207)
[java] at gui.PushCounter.main(PushCounter.java:18)
[java] Java Result: 1
BUILD SUCCESSFUL
Total time: 0 seconds
当您使用命令行时,在Java中是否有不同的类或方法来创建图形用户界面?除了Putty之外,有没有其他更适合使用Java图形用户界面的终端?我是否需要在我的代码或Linux服务器中添加一些额外的东西?
2条答案
按热度按时间kg7wmglp1#
对于创建图形用户界面,Swing可能是一个很好的选择;我认为您没有理由更改它。
我建议你看看X Forwarding。使用X转发,您可以像往常一样通过SSH连接到服务器。服务器运行您的所有代码并处理您的图形用户界面的创建。然后,它将窗口显示信息发送回您的计算机。
我找到了一个快速的guide to configuring X forwarding in PuTTy。它应该能很好地满足你的需求。
注意事项
要使X转发起作用,您的SSH配置必须启用它。您当然可以与您的教授讨论这一点--这只是对sshd配置文件的简单更改。如果您和服务器都在校园内,X转发的速度应该不是问题,但请注意,这可能是其他网络设置的缺点。
6kkfgxo02#
要在基于Linux的机器中运行图形用户界面应用程序,应将$DISPLAY定义为传递所有图形用户界面信息。
因此,我们有多种方法可以做到这一点:
1-连接真实显示器:
因此,您将发现
$DISPLAY
环境已定义,然后您就可以运行该图形用户界面应用程序了。2-X转发:
当您连接到远程Linux系统时,要求它将图形用户界面操作缓冲区转发到您的计算机
ssh -X run-my-gui-application.sh
3-显示造假(硬件解决方案):
通过注入一个小型的实际硬件,如USB连接器(不是显示器),操作系统将假定有显示器,然后gui应用程序将运行
4-显示造假(软件解决方案):
通过安装一个包来模拟显示,例如使用xvfb lib: