2009-12-23 41 views
4

免責聲明使用的JFace和SWT在eclipse:離不開創建插件

這是.NET GUI的努力工作,他圍繞Java的東西的方式經典案例。

問題描述:

我試圖建立到JFace和SWT一個非常簡單的圖形用戶界面 - 代碼很簡單(有很多教程),它不是那麼簡單的是,我似乎無法讓JFace和SWT在一個插件項目之外工作。因爲我把CLASSPATH中的「C:/ eclipse 3.5/plugins」(從我的計算機 - >屬性 - >高級 - )添加到我的項目中,所以我期望能夠在我的項目中使用JFace和SWT。 >環境變量)和所有swt - *。dll我可以在我的PATH(本地用戶和全局路徑,可以肯定)中找到,因爲this article在「安裝SWT和JFace」框中指示。

問題是我不能從eclipse.org導入任何東西,除非我直接從構建路徑引用jar - >庫 - >添加外部jar(爲了構建它,我必須添加以下jar:org.eclipse.swt.win32.win32.x86_3.5.1.v3555a.jarorg.eclipse.jface_3.5.1.M20090826-0800.jar)。一旦我這樣做,它建立正常,但後來當我運行它爲「Java應用程序」,我得到以下錯誤(我應該RUN AS別的東西嗎?):

Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/core/runtime/IProgressMonitor 
    at demo.ui.test.EntryPoint.main(EntryPoint.java:18) 
Caused by: java.lang.ClassNotFoundException: org.eclipse.core.runtime.IProgressMonitor 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:200) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:252) 
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320) 
    ... 1 more 

我試圖調試這一點,基本上它只要它試圖實例化ApplicationWindow類(org.eclipse.jface.window.ApplicationWindow)時拋出。試圖重現錯誤,我評論了我所有的代碼,並在我的主要下列替代它,它拋出他同樣的錯誤上面第一行:

ApplicationWindow w = new ApplicationWindow(null); //<-- error on this line 
w.setBlockOnOpen(true); 
w.open(); 
Display.getCurrent().dispose(); 

問題:

問題1:我如何解決上面的錯誤(我想了解發生了什麼)並讓該死的東西運行?

問題2:爲什麼罐子對我的項目不可見以及如何製作它們?

由於缺乏對Java和eclipse的熟悉,我可能會錯過一些非常平凡的東西。任何幫助高度讚賞!

編輯:好像別人有同樣的問題 - >http://www.eclipsezone.com/eclipse/forums/t60528.html - 不太清楚他們是如何解決它雖然援助讚賞

回答

11

IProgressMonitor接口是不是在你使用這兩個罐子可用。您還需要在您的類路徑中放入org.eclipse.equinox.common插件。可以在沒有運行整個eclipse環境的情況下使用IProgressMonitor。 (這是你引用的文章的解決方案,我原本以爲IProgressMonitor是在org.eclipse.core.runtime插件中,但它已被移到org.eclipse.equinox。通常如bug #122935中所述)

+1

謝謝 - 我設法瞭解這一點,但它花了一段時間,因爲在那篇文章中他們談論的MANIFEST文件,我沒有,因爲我是一個普通的java。所以我繼續並添加了對org.eclipse.equinox.common的引用,並修復了它(開始拋出關於EventManager的另一個錯誤,但修復了引用org.eclipse.core.commands的錯誤)。我發現這很混亂......如果我需要運行應用程序的某些內容丟失,我應該收到一些警告。 – JohnIdol 2009-12-23 14:15:35

+0

這確實令人困惑。如果你正在開發eclipse插件,你會得到所有的警告,因爲插件依賴項被寫入MANIFEST.MF文件。如果你直接引用了一些缺失的類/接口,你也會收到警告。但是在獨立應用程序中使用jar文件是棘手的,你需要自己尋找依賴關係(或者使用類似Ivy或Maven的東西)。 – 2009-12-23 14:27:32

+0

如何將'org.eclipse.equinox.common'添加到你的類路徑中?你能提供說明嗎?你從哪裏得到它,你在哪裏安裝它? – CodyBugstein 2013-05-10 20:24:42

6

迴應彼得的觀點,我總是不得不添加一堆JAR來讓事情運行(特別是對於JFace)。通常,我需要

./org.eclipse.core.commands_3.3.0.I20070605-0010.jar 
./org.eclipse.core.runtime_3.3.100.v20070530.jar 
./org.eclipse.equinox.common_3.3.0.v20070426.jar 
./org.eclipse.jface_3.3.1.M20070910-0800b.jar 
./org.eclipse.osgi_3.3.2.R33x_v20080105.jar 
./org.eclipse.ui.forms_3.3.0.v20070511.jar 

您可以使用類似jarfinder的東西來幫助找出哪些文件存在於哪些JAR中。在Windows中,我似乎記得使用查找功能在文件系統上的eclipse文件夾下的zip/jar文件中查找IProgressMonitor.class - 因爲有時實際的JAR很難追蹤到。

我通常通過查看失敗的原因,追蹤/添加JAR,沖洗並重復。

做RCP /插件看起來像Eclipse爲您處理了很多問題,做自己的獨立應用程序帶有這個額外的行李,但它真的很高興有一個適當的獨立本機看圖形用戶界面,如果你堅持用它。所以我通常會設置vanilla(非插件)eclipse項目,並迫使你面對這些問題(手動將JAR添加到類路徑中)。它還可以在您想要分發項目時派上用場。

+0

爲我工作:) – CodyBugstein 2013-08-09 17:18:48

+0

+1其工作,thx – justSaid 2014-02-26 23:07:39