HeadlessException Java

时间:2016-05-28 07:55:49

标签: java macos ssh

请原谅我,如果已经回答了 - 我看了但找不到任何东西......

我在使用SSH运行java程序时遇到问题。我在Mac上本地运行终端代码没有问题,但是当我尝试通过SSH连接到Mac上的其他用户时,我得到了HeadlessException。当我以该用户身份登录并在其终端窗口中运行时,甚至没有任何问题 - 只有在使用SSH时才会出现此问题。

我发出以下命令:

>> ssh -X remoteguest@host
>> java LifeCounter

我收到以下错误:

java.awt.HeadlessException
at java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:204)
at java.awt.Window.<init>(Window.java:536)
at java.awt.Frame.<init>(Frame.java:420)
at javax.swing.JFrame.<init>(JFrame.java:233)
at setupGUI.<init>(LifeCounter.java:156)
at LifeCounter$1.run(LifeCounter.java:18)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

非常感谢任何帮助。

TIA

1 个答案:

答案 0 :(得分:0)

我还不确定你到底想要做什么。所以,我会尝试覆盖所有基地。

如果您想通过ssh运行图形UI应用程序,那根本不可能。图形UI根本不是协议的一部分。当您在终端窗口中运行程序时,终端窗口将在图形UI会话中运行,因此GUI也可用于您的程序。但是当你在远程机器上通过ssh运行它时,它只是一个没有任何GUI的文本终端。

如果您想运行图形用户界面,您可以使用提供用户界面的远程协议(例如vnc,屏幕共享,TeamViewer,Chrome远程桌面等),也可以使用其他用户图形会话(该计算机的本地会话) )在他/她的屏幕上运行它。

现在,vnc或屏幕共享很容易设置。

使用其他用户的会话更复杂。请在问题评论中查看this link。请注意,它还取决于目标系统上OS X的版本,您的里程可能会有所不同。另请注意,您不会看到它正在运行 - 其他用户会看到它并与之互动。

还有一个选择是在您的计算机上运行X11服务器(图形用户界面),并使您的应用程序在远程计算机上运行,​​并连接回您的X11服务器。但那更加复杂。首先,您需要告诉您的应用程序连接回您的计算机,并且必须首先配置连接(例如端口转发)。更糟糕的是,OS X UI并不完全是X11(这就是为什么有些应用需要XQuartz),所以你可能也必须在这里克服一些不兼容性。再说一次,这不是不可能的,但非常复杂,我害怕你自己在这里。