2014-08-29 29 views
0

所以我在Linux中編寫了這個程序,當我創建一個jar並運行它時,它運行得非常完美。Linux但不是Windows? Java swing

但由於某種原因,當我把這個罐子在Windows它沒有。

它的一些工作,但是當我試圖做到這一點崩潰,並告訴我

有一個

Exception in thread "AWT-EVentQueue-0" java.lang.NoClassDefFoundError: miginfocom/layout/cc 

嘛反正我擺脫它,它的某些組件的一個簡單的點擊操作事件作品,但與他們沒有。

// MigLayout layout = new MigLayout("fillx"); 
      JPanel content = new JPanel(/*layout*/); 

/*CC componentConstraints = new CC(); 
      CC c = new CC(); 
      componentConstraints.alignX("center").spanX(); 
      c.alignX("center").span(); 
      c.alignY("bottom").span();*/ 

      content.add(label/*, componentConstraints*/); 
      content.add(label1/*,c*/); 

    // after this I add it to a Jframe etc 

所有那些被註釋掉的是它不會在windows上工作的原因。

但它會在Linux上,我不知道這是爲什麼...

誰能告訴這是爲什麼或在哪裏可以找到答案。這將是非常感激和對未來有用:)

+2

當您爲項目開票時,您可能還有其他庫jar相關聯,這些庫jars需要包含在類路徑中以供應用程序使用。看看[爲JAR文件的類路徑添加類](http://docs.oracle.com/javase/tutorial/deployment/jar/downman.html)以獲取更多詳細信息 – MadProgrammer 2014-08-29 10:46:59

回答

3

如果您希望分發只有一個JAR文件,並有一切工作,你將不得不創建一個「uberjar」。在您的開發機器上,您可能有權訪問JAR的依賴項,但是當您僅將應用程序JAR複製到Windows時,情況並非如此。

+1

*「您將不得不創建一個」uberjar 「」不,你不知道。如果LAF處於應用程序的運行時類路徑上,它將起作用。製作一個全包式Jar只是實現這一目標的一種方式(而不是一種特別優化的方式)。 – 2014-08-30 01:59:10

+0

MigLayout不是LAF。 – 2014-08-30 05:50:07

+0

我的API使用標識不好。但無論如何,它需要在班級之路上。 – 2014-08-30 06:02:08

5

我假設你的類路徑不正確。 因此找不到所需的庫(例如MigLayout)。 Windows使用與Linux不同的Path-Seperator(在classpath中)。

+0

我將如何去解決:) – 2014-08-29 13:18:53

+0

檢查你的類路徑。 Windows使用; (分號)作爲路徑分隔符,linux使用:(冒號)。此外,檢查罐子是否是有效的Windows路徑。 (例如/home/user/libs/MigLayout.jar)在Windows環境中可能會有問題 – Ben 2014-08-29 13:45:54

相關問題