2014-05-09 155 views
1

对不起,有一个简短的问题,以及长时间的解释。客户端服务器GUI资源

我的本地Clojure程序运行正常,并使用GUI控件,但是当从服务器运行时,它失败。你能帮我吗?

我一直在无头Ubuntu(14.04)服务器上测试Clojure示例代码。我在LightTable中运行这些程序,然后再用连接到Ubuntu repl的LT运行它们。

对我不起作用的程序是在本机OS X中打开文件选择器对话框,以便我可以将文档上载到服务器。看来,我的Macbook找到的某些GUI资源并未被服务器程序找到。我让它工作了一个小时,并且我使用的网站查找功能,没有问题。

我觉得我陷入了一个地狱般的状态,试图让这个样本工作,我真的需要它的工作。

我有VirtualBox扩展包,应该提供VRDE。

我已经不同地尝试了不同的服务器启动选项和ssh选项。如果我设置了环境变量,我的客户端程序就无法使用这些细节。

对我来说最糟糕的是,它确实有效 - 曾经有一次。我的努力使工作变革永久化了,再次打破了它。尽管恢复了快照并恢复了我的Macbook,但我无法再继续使用此设置。

简而言之,运行在客户端上的GUI程序在从服务器运行时遇到问题。请帮忙。我被困了好几天。

我不知道它是否有帮助,但我已经安装了Xauth和Webmin。 Webmin被描述为'一个基于网络的Linux GUI管理工具'。

我一直建议使用Java WebStart,但是,我读到这是包含和自动使用。更进一步,我无法看到解决方案。

我提供完整的错误消息,从LightTable复制的情况下,可以帮助你帮助我:

**java.awt.HeadlessException: 
No X11 DISPLAY variable was set, but this program performed an operation which requires it. 
GraphicsEnvironment.java:207 java.awt.GraphicsEnvironment.checkHeadless 
      Window.java:535 java.awt.Window.<init> 
      Frame.java:420 java.awt.Frame.<init> 
      Frame.java:385 java.awt.Frame.<init> 
      JFrame.java:174 javax.swing.JFrame.<init> 
     (Unknown Source) com.ociweb.swing.proxy$javax.swing.JFrame$ActionListener$c1f703.<init> 
     (Unknown Source) com.ociweb.swing$eval7839.invoke 
     Compiler.java:6703 clojure.lang.Compiler.eval 
     Compiler.java:6666 clojure.lang.Compiler.eval 
      core.clj:2927 clojure.core/eval 
       eval.clj:77 lighttable.nrepl.eval/->result 
      AFn.java:156 clojure.lang.AFn.applyToHelper 
      AFn.java:144 clojure.lang.AFn.applyTo 
      core.clj:626 clojure.core/apply 
      core.clj:2468 clojure.core/partial[fn] 
      RestFn.java:408 clojure.lang.RestFn.invoke 
      core.clj:2559 clojure.core/map[fn] 
      LazySeq.java:40 clojure.lang.LazySeq.sval 
      LazySeq.java:49 clojure.lang.LazySeq.seq 
       RT.java:484 clojure.lang.RT.seq 
      core.clj:133 clojure.core/seq 
      core.clj:2595 clojure.core/filter[fn] 
      LazySeq.java:40 clojure.lang.LazySeq.sval 
      LazySeq.java:56 clojure.lang.LazySeq.seq 
      Cons.java:39 clojure.lang.Cons.next 
      LazySeq.java:81 clojure.lang.LazySeq.next 
       RT.java:598 clojure.lang.RT.next 
       core.clj:64 clojure.core/next 
      core.clj:2856 clojure.core/dorun 
      core.clj:2871 clojure.core/doall 
      eval.clj:126 lighttable.nrepl.eval/eval-clj 
      RestFn.java:442 clojure.lang.RestFn.invoke 
      sonar.clj:215 lighttable.nrepl.sonar/eval5355[fn] 
      AFn.java:152 clojure.lang.AFn.applyToHelper 
      AFn.java:144 clojure.lang.AFn.applyTo 
      core.clj:624 clojure.core/apply 
      core.clj:1862 clojure.core/with-bindings* 
      RestFn.java:425 clojure.lang.RestFn.invoke 
      sonar.clj:203 lighttable.nrepl.sonar/eval5355[fn] 
     MultiFn.java:227 clojure.lang.MultiFn.invoke 
       core.clj:98 lighttable.nrepl.core/queued[fn] 
      core.clj:2402 clojure.core/comp[fn] 
interruptible_eval.clj:138 clojure.tools.nrepl.middleware.interruptible-eval/run-next[fn] 
       AFn.java:22 clojure.lang.AFn.run 
ThreadPoolExecutor.java:1145 java.util.concurrent.ThreadPoolExecutor.runWorker 
ThreadPoolExecutor.java:615 java.util.concurrent.ThreadPoolExecutor$Worker.run 
      Thread.java:744 java.lang.Thread.run** 
+0

您能否详细介绍一下您是如何开始在服务器上提供repl的流程的,我可以假设您在SSH中运行并运行了leiningen吗? –

+0

你是对的!我启动一个无头的Ubuntu服务器,然后ssh Core - 服务器主机名。我运行lein repl,指定主机和端口。然后我在LightTable中使用这些细节,将我的示例代码粘贴到... schoren!如果我设置了DISPLAY变量,它只会抛出一个类似但不同的错误。 – Dvious

+0

“打开文件选择器对话框”。在无服务器的这一点上,你想要发生什么? –

回答

1

我不知道有足够的了解您的设置给个说法,但我以前遇到过这个错误,并且用-Djava.awt.headless = true运行java/clojure解决了这个问题。 有关更多信息,请参阅here

+0

感谢您的回复。 – Dvious

+0

感谢您的回复。我之前曾在Clojure项目中将它作为 - :jvm_opts [“-Djava.awt.headless = true”],但它并没有什么区别。不过,我会把它放在project.clj中。 – Dvious

0

如果你想远程雷音要能够在本地系统上打开的窗户你能

ssh -X core.domain.com 
lein repl .... 

这将导致由远程服务器创建的任何窗口通过SSH连接到您的桌面进行隧道传送回。尽管只要你保持SSH连接活着。

+0

我一直这样做,没有成功。 – Dvious

+0

我现在似乎有它的工作。我设法让示例程序启动OS X本机对话框。要做到这一点,我必须创建xfvb服务,并将/ etc/ennvironment/DISPLAY变量设置为我的服务器IP地址。随着Tomcat的启动,我启动了一个repl,并将LT打开到相同的repl。这一切工作,所以问题解决了! – Dvious