【发布时间】:2014-10-06 18:20:59
【问题描述】:
我在 mac osx 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-ing 后显示我的 gui 吗?我不想使用 X11(更喜欢原生 gui 渲染)。
【问题讨论】:
-
不幸的是,这不起作用。
-Djava.awt.headless=false也不适合我。据我了解,这是一个特定于 mac 的问题,因为 mac osx 如何设置通过终端启动的终端与通过 ssh 启动的终端。ssh -X也不起作用 -
使用
ssh -X在 ssh 下强制执行 X11 协议隧道。 -
谢谢 - 我看过那个,但那是关于在 linux 机器上显示,而不是在 mac os x 上 - 就此而言,我什至不知道为什么错误提到 X11,因为我不是使用 X11 并原生显示 gui
-
@Jean-BaptisteYunès 不幸的是,这不起作用 - 这里我直接使用 mac os 来显示 gui,而不是 X11