如何在GL Linux服务器命令行中使用Java图形用户界面?

h9vpoimq  于 2022-10-04  发布在  Linux
关注(0)|答案(2)|浏览(182)

我的学校项目都是在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服务器中添加一些额外的东西?

kg7wmglp

kg7wmglp1#

对于创建图形用户界面,Swing可能是一个很好的选择;我认为您没有理由更改它。

我建议你看看X Forwarding。使用X转发,您可以像往常一样通过SSH连接到服务器。服务器运行您的所有代码并处理您的图形用户界面的创建。然后,它将窗口显示信息发送回您的计算机。

我找到了一个快速的guide to configuring X forwarding in PuTTy。它应该能很好地满足你的需求。

注意事项

要使X转发起作用,您的SSH配置必须启用它。您当然可以与您的教授讨论这一点--这只是对sshd配置文件的简单更改。如果您和服务器都在校园内,X转发的速度应该不是问题,但请注意,这可能是其他网络设置的缺点。

6kkfgxo0

6kkfgxo02#

要在基于Linux的机器中运行图形用户界面应用程序,应将$DISPLAY定义为传递所有图形用户界面信息。

因此,我们有多种方法可以做到这一点:

1-连接真实显示器:
因此,您将发现$DISPLAY环境已定义,然后您就可以运行该图形用户界面应用程序了。

2-X转发:
当您连接到远程Linux系统时,要求它将图形用户界面操作缓冲区转发到您的计算机
ssh -X run-my-gui-application.sh

3-显示造假(硬件解决方案):
通过注入一个小型的实际硬件,如USB连接器(不是显示器),操作系统将假定有显示器,然后gui应用程序将运行

4-显示造假(软件解决方案):
通过安装一个包来模拟显示,例如使用xvfb lib:

sudo apt-get install xvfb

# [GUI] headless mode

# ~FAKE DISPLAY~ number 88

nohup Xvfb :88 -ac & 
export DISPLAY=:88.0

相关问题