如何在ssh之后在mac osx上运行java GUI

时间:2014-10-06 18:20:59

标签: java macos ssh terminal

我在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渲染)。

2 个答案:

答案 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。