2014-05-09 224 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