2014-10-06 1 views
2

Mac OS X 10.7.5에서 Java 1.7.0_67을 사용하고 있습니다. 내가 맥 터미널을 열고 java helloWorld를 입력 할 때ssh 후에 mac osx에서 Java 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); 
    } 
} 

이 잘 실행 : 여기 내 안녕하세요 세계 GUI입니다. 내가 할 수있었습니다 무엇

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) 

이에서, 자바 1.6에서 작동하는 데 사용 : 나는 다른 호스트에서 내 맥에 ssh를 때, 내 DISPLAY ENV 변수를 설정, 실행, 나는 다음과 같은 예외가 이것을 연구하는 것이 목적이있는 휴식 인 것 같습니다.

어떻게하면 원격 호스트에서 ssh-ing 한 후 내 gui를 표시 할 수 있습니까? 나는 X11을 사용하고 싶지 않다 (네이티브 GUI 렌더링을 선호한다).

+0

아쉽게도 작동하지 않습니다. '-Djava.awt.headless = false'도 나를 위해 작동하지 않습니다. 내가 이해하는 바에 따르면, 이것은 mac osx가 터미널을 통해 시작된 터미널을 ssh를 통해 시작하는 방법 때문에 Mac 관련 문제입니다. 'ssh -X'도 작동하지 않습니다 – gnr

+0

ssh에서 X11 프로토콜 터널링을 시행하기 위해'ssh -X'를 사용하십시오. –

+0

가능한 복제본 "[No X11 DISPLAY variable"- 의미는 무엇입니까?] (http://stackoverflow.com/questions/662421/no-x11-display-variable-what-does-it-mean) – StackFlowed

답변

3

Mac OS X의 ssh 세션에서 Java 개발자 chose to use the headless Toolkit을 실행 중일 때 AWT_TOOLKIT 환경 변수를 CToolkit으로 설정하여 Java를 진행하고 GUI를 표시하도록 설득 할 수 있습니다. 예를 들어, bash :

export AWT_TOOLKIT=CToolkit 
java helloWorld 

변수 세트를 사용하면 GUI가 예상대로 표시되어야합니다.

+0

@ duskwuff -이게 나를 위해 일했다.이 솔루션에 대해 어떻게 생각하는지 궁금해한다. – gnr

+0

여러 대의 데스크탑으로 한 대의 Mac에 여러 사용자가 로그인 한 경우에도 작동합니다. 사용자가 선택한 것으로 보입니다. -id, 그건 의미가 있습니다. –

+0

흥미롭게도 MBP에서는 작동하지 않습니다. Mac Minis에서 빌드 에이전트로 사용합니다. 아마도 Quartz 세션을 로컬에 가지고 있었기 때문일까? 나는 간단히 '/Applications/Sikuli.app'를 열어 도크의 아이콘을 볼 수 있기 때문에 로그인 세션이 어떻게 든 통신합니다. –

0

수 없습니다. Mac OS X의 윈도우 서버에 연결하려면 프로세스가 현재 사용자의 login session이어야합니다. SSH는 로그인 세션의 일부가 아니므로 SSH를 통해 실행되는 프로세스는 창 서버에 연결할 수 없으므로 GUI를 표시 할 수 없습니다.

+0

정말? Mac OS X 10.7.3 및 Java 1.6.0_29에서이 작업을 수행 할 수 있습니까? 버전간에 변경이 있습니까? 어쨌든, 내가 가짜 일 수있는 방법 (예 : 환경 변수 설정, 일부 설정 파일 변경 등) – gnr

+1

이것이 이전 버전의 Mac OS X에서 작동했을 수도있는 이유를 알지 못합니다. 아니요,이 동작을 재정의 할 방법이 없습니다. – duskwuff

+0

ssh 쉘에서 'some.jpg'를 열면 내 바탕 화면에 나타나고 'some.sh 열기'는 'some.sh; exit '를 정의한 모든 데스크탑 env-vars가있는 터미널 창에서 종료하십시오. -W 옵션을 사용하면 응용 프로그램이 종료 될 때까지 대기합니다 (annoyingly -args 뒤에 인수를 전달하지는 않지만). 엄격히 진실하지 않습니다. (비록 내가 관리자로 실행하고있다) –

관련 문제