我在mac osx 10.7.5上使用java 1.7.0_67。这是我的你好世界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
env变量并运行时,我得到以下异常:
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渲染)。
答案 0 :(得分:3)
Java开发人员chose to use the headless Toolkit在Mac OS X上的ssh会话中运行时。您可以通过将AWT_TOOLKIT
环境变量设置为CToolkit
来说服Java继续显示GUI 。例如,在bash中:
export AWT_TOOLKIT=CToolkit
java helloWorld
使用变量集,您的GUI应该按预期显示。
答案 1 :(得分:0)
你不能。要连接到Mac OS X上的窗口服务器,该过程必须位于当前用户的login session中。 SSH不是登录会话的一部分,因此通过SSH运行的进程无法连接到窗口服务器,因此无法显示GUI。