我正在使用 Mac OS X 10.7.5 上的 Java 1.7.0_67。以下是我的“Hello World” GUI:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class helloWorld extends JFrame {
helloWorld(String title) {
this.setSize(500,500);
setTitle(title);
}
public static void main(String[] args) {
helloWorld window = new helloWorld("Helloworld");
window.setVisible(true);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
当我在 Mac 终端中打开并输入 java helloWorld
时,程序可以正常运行。然而,当我从另一台主机 ssh 连接到我的 Mac,并设置了 DISPLAY
环境变量并运行程序时,出现以下异常:
Exception in thread "main" java.awt.HeadlessException:
No X11 DISPLAY variable was set, but this program performed an operation which requires it.
at java.awt.GraphicsEnvironment.checkedHeadless(GraphicsEnvironment.java:207)
at java.awt.Window.<init>(Window.java:535)
at java.awt.Frame.<init>(Frame.java:420)
at java.awt.Frame.<init>(Frame.java:385)
at javax.swing.JFrame.<init>(JFrame.java:180)
at helloWorld.<init>(helloWorld.java:8)
at helloWorld.main(helloWorld.java:14)
据我所查,这个问题好像是故意制造的,因为在Java 1.6版本中仍能正常工作。
有没有什么办法可以让远程主机通过ssh登录后显示GUI界面而不使用X11(希望使用本地的GUI渲染)?
ssh -X
命令在 ssh 下启用 X11 协议隧道传输。 - Jean-Baptiste Yunès