子在川上曰

            逝者如斯夫不舍晝夜
          隨筆 - 71, 文章 - 0, 評(píng)論 - 915, 引用 - 0
          數(shù)據(jù)加載中……

          在Eclipse RCP中使用Spring

          注:在發(fā)完此文后,我驚奇的發(fā)現(xiàn)在新版Eclipse中(我用的是3.2M6)已經(jīng)不需要轉(zhuǎn)換ClassLoader。估計(jì)這是RCP的一個(gè)BUG,已經(jīng)被FIX。希望各位同學(xué)共同驗(yàn)證一下,如果是這樣的話,這篇文章也就沒(méi)有什么意義了。


          在RCP中使用Spring,最關(guān)鍵的一點(diǎn)在于spring配置文件的讀取,因?yàn)镽CP使用自己的ClassLoader,所以用通常的方法是無(wú)法裝載Spring的配置文件。解決的思路是:在讀取Spring配置文件時(shí)將RCP的ClassLoader暫時(shí)換一下。

          在這里我根據(jù)Spring配置文件在項(xiàng)目中的存放位置,給出兩種辦法。

          一、配置文件存放在源代碼根目錄下。

          假設(shè)我有一個(gè)叫admin_console的項(xiàng)目,我把Spring的配置文件myspring.xml放在源代碼根據(jù)目錄src下,如下圖所示
          admin_console
          ????? --src
          ?????????? --cn????? //包名
          ?????????????? --com
          ????????????????? --chengang?
          ????????????????????? ---......???? //源代碼類(lèi)
          ????????? --myspring.xml????? //Spring配置文件,位于src目錄下和cn目錄平級(jí)
          ??????--bin
          ????? --lib
          ????? --icons
          ????? --properties


          那么我們?cè)赗CP程序中可以這樣來(lái)裝載myspring.xml
          ????????ClassLoader?oldLoader?=?Thread.currentThread().getContextClassLoader();
          ????????
          try?{
          ????????????Thread.currentThread().setContextClassLoader(this.getClass()
          .getClassLoader());
          ????????????
          ctx?=?new?ClassPathXmlApplicationContext("/myspring.xml");
          ????????}?finally?{
          ????????????Thread.currentThread().setContextClassLoader(oldLoader);
          ????????}



          二、配置文件存放在項(xiàng)目根目錄的某個(gè)子目錄下

          項(xiàng)目根目錄和源代碼根目錄是不同的兩個(gè)概念。如上圖的項(xiàng)目結(jié)構(gòu)中,src是源代碼根目錄,admin_console是項(xiàng)目根目錄,那么properties就是項(xiàng)目根目錄下的一個(gè)子目錄。

          如果將myspring.xml放入到properties目錄中,以上的讀取代碼就沒(méi)用了,讀取方法如下:

          ????????ClassLoader?oldLoader?=?Thread.currentThread().getContextClassLoader();
          ????????
          try?{
          ????????????Thread.currentThread().setContextClassLoader(this.getClass()
          .getClassLoader());
             ctx?=?new FileSystemXmlApplicationContext(ProjectUtil.toFullPath("properties/myspring.xml"));
          ????????}?finally?{
          ????????????Thread.currentThread().setContextClassLoader(oldLoader);
          ????????}

          其中ProjectUtil.toFullPath是我自己寫(xiě)的一個(gè)方法,主要是得到myspring.xml的絕對(duì)路徑,其代碼如下:

          import java.io.IOException;
          import java.io.InputStream;
          import java.net.MalformedURLException;
          import java.net.URL;
          ?
          import org.eclipse.core.runtime.FileLocator;
          import org.eclipse.core.runtime.Path;
          import org.eclipse.ui.plugin.AbstractUIPlugin;
          ?
          import com.wxxr.management.admin.console.AdminConsolePlugin;
          ?
          /**
          ?* 用于插件項(xiàng)目和非插件項(xiàng)目,提供兩者通用的方法接口
          ?* @author chengang 2006-3-30
          ?*/
          public class ProjectUtil {
          ?
          ??? private static AbstractUIPlugin plugin = AdminConsolePlugin.getDefault();
          ?
          ??? private ProjectUtil() {}
          ?
          ??? /**
          ???? * 判斷當(dāng)前的運(yùn)行狀態(tài)是否為插件方式
          ???? * @return true=插件方式運(yùn)行
          ???? */
          ??? private static boolean isPlugin() {
          ??????? return plugin != null;
          ??? }
          ?
          ??? public static URL getURL(String path) {
          ??????? if (isPlugin())//如果是插件
          ??????????? return FileLocator.find(plugin.getBundle(), new Path(path), null);
          ??????? else
          ??????????? try {
          ??????????????? return new URL("file:" + path);
          ??????????? } catch (MalformedURLException e) {
          ??????????????? throw new RuntimeException(path + " is error", e);
          ??????????? }
          ??? }
          ?
          ??? public static InputStream getInputStream(String path) {
          ??????? URL url = getURL(path);
          ??????? try {
          ??????????? return url.openStream();
          ??????? } catch (IOException e) {
          ??????????? throw new RuntimeException(e);
          ??????? }
          ??? }
          ?
          ??? public static String toFullPath(String path) {
          ??????? if (isPlugin()) {
          ??????????? try {
          ??????????????? return FileLocator.toFileURL(ProjectUtil.getURL(path)).getPath();
          ??????????? } catch (IOException e) {
          ??????????????? throw new RuntimeException(path + " toFullPath is fault", e);
          ??????????? }
          ??????? } else {
          ??????????? return path;
          ??????? }
          ??? }
          ?
          }


          三、總結(jié)

          上面兩種方式那一種更好呢?應(yīng)該是第二種。一般來(lái)說(shuō),源代碼的編譯文件會(huì)打成一個(gè)jar包(其實(shí)不打成一個(gè)JAR包也可以的,我在很多以前就嘗試過(guò)將class文件松散的部署,如果哪個(gè)類(lèi)要修改,修改后就只部署覆蓋這個(gè)class,看起來(lái)也挺方便。不過(guò)這種方式不是最佳實(shí)踐,不推薦正式發(fā)布時(shí)使用,一不心可能引起依賴它的其他類(lèi)出現(xiàn)問(wèn)題。)。如果用第一種方式在項(xiàng)目打包后,myspring.xml會(huì)打包到j(luò)ar文件中,這樣不利于今后對(duì)myspring進(jìn)行動(dòng)態(tài)修改。如果用第二種就沒(méi)有這種缺點(diǎn)。

          很多時(shí)候,在Eclipse開(kāi)發(fā)環(huán)境中,運(yùn)行RCP程序沒(méi)有問(wèn)題。但導(dǎo)出項(xiàng)目后,在獨(dú)立的環(huán)境中卻報(bào)配置文件(不光是Spring)找不到的錯(cuò)誤,解決的方法都基本與此相同。

          posted on 2006-04-26 17:44 陳剛 閱讀(7523) 評(píng)論(22)  編輯  收藏 所屬分類(lèi): Eclipse

          評(píng)論

          # re: 在Eclipse RCP中使用Spring  回復(fù)  更多評(píng)論   

          ClassLoader oldLoader = Thread.currentThread().getContextClassLoader();
          try {
          Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader());
          ctx = new ClassPathXmlApplicationContext("/myspring.xml");
          } finally {
          Thread.currentThread().setContextClassLoader(oldLoader);
          }
          1,這端代碼放到RCP的Application中可以嗎?
          2,ClassPathXmlApplicationContext在RCP開(kāi)發(fā)中沒(méi)有這個(gè)類(lèi),如果按同樣的方法來(lái)配置Hibernate應(yīng)該使用那個(gè)類(lèi)呢?
          3,恕我愚笨能給詳細(xì)教教小弟配置一下嗎?
          2006-08-23 21:42 | qiuliang

          # re: 在Eclipse RCP中使用Spring  回復(fù)  更多評(píng)論   

          其實(shí)我得,目的就是在RCP中配置Hibernate!spring我并不懂,陳先生,如果我問(wèn)的不對(duì)還請(qǐng)你見(jiàn)涼,但是我真的很渴望知道怎么在RCP中配置和使用Hibernate!
          2006-08-23 21:45 | qiuliang

          # re: 在Eclipse RCP中使用Spring  回復(fù)  更多評(píng)論   

          @qiuliang
          關(guān)于hibernate看這篇文章
          http://www.aygfsteel.com/chengang/archive/2006/08/24/65484.html
          2006-08-24 12:29 | 陳剛

          # re: 在Eclipse RCP中使用Spring  回復(fù)  更多評(píng)論   

          這個(gè)問(wèn)題貌似并沒(méi)有在ECLIPSE3.2中被完美解決。事實(shí)上也不是一個(gè)需要被解決的BUG。我曾經(jīng)碰到過(guò)相同的問(wèn)題,特地下載了ECLIPSE3.2試驗(yàn),但是并沒(méi)有成功。
          談?wù)勥@個(gè)問(wèn)題的根源:ECLIPSE的每個(gè)PLUGIN被自己專(zhuān)屬的CLASSLOADER所加載,專(zhuān)屬的CLASSLOADER也只能識(shí)別出當(dāng)前PLUGIN下的類(lèi)和配置文件,所以如果在當(dāng)前PLUGIN下調(diào)用有依賴關(guān)系的另一個(gè)PLUGIN中的CLASS來(lái)動(dòng)態(tài)加載當(dāng)前PLUGIN下的類(lèi)或者配置文件,那么錯(cuò)誤就發(fā)生了,因?yàn)榱硪粋€(gè)PLUGIN的CLASSLOADER找不到它需要的類(lèi)或者配置文件。
          ECLIPSE 3.1起對(duì)這個(gè)問(wèn)題有一個(gè)優(yōu)雅的解決方式,就是在上述的兩個(gè)PLUGIN的MANIFEST文件中配置注冊(cè)關(guān)系。

          陳師傅可以驗(yàn)證一下我的說(shuō)法。有空我可以貼出例證代碼。
          2006-09-26 11:42 | JIAWEI

          # re: 在Eclipse RCP中使用Spring  回復(fù)  更多評(píng)論   

          @JIAWEI
          是的新版Eclipse已經(jīng)解決這個(gè)問(wèn)題。
          2006-10-08 09:57 | 陳剛

          # re: 在Eclipse RCP中使用Spring  回復(fù)  更多評(píng)論   

          沒(méi)仔細(xì)研究過(guò)RCP的ClassLoader,不太理解陳師傅所說(shuō)。

          我在插件開(kāi)發(fā)中是使用spring的方法類(lèi)似陳師傅說(shuō)的第二種:放在properties文件夾下。不過(guò)我沒(méi)有用ProjectUtils這樣的方法找絕對(duì)路徑,我的方法是:
          1、將properties文件夾加入到項(xiàng)目的Runtime ClassPath中
          2、在getApplicatonContext時(shí)用ClassPathXmlApplicationContext就能去properties文件夾中去找;

          BTW:
          RCP的ClassLoader是不是就是在啟動(dòng)時(shí)自動(dòng)裝載所需類(lèi)?
          2007-03-24 10:45 | 烏黑的大白馬

          # re: 在Eclipse RCP中使用Spring  回復(fù)  更多評(píng)論   

          陳老師,請(qǐng)問(wèn)下我用您的第二種方式的的話,那打包成Jar文件中會(huì)不會(huì)有什么錯(cuò)誤,打包后應(yīng)該只有一個(gè)bin目錄,沒(méi)有那個(gè)src和config(配置文件放這里),可以得到文件路徑嗎?
          2007-08-08 11:33 | liuraoxing

          # re: 在Eclipse RCP中使用Spring  回復(fù)  更多評(píng)論   

          打包后不會(huì)有 bin目錄的,所以你打包的目錄結(jié)構(gòu)錯(cuò)了。
          具體請(qǐng)參考<Eclipse從入門(mén)到精通>第二版的,第32章'RCP項(xiàng)目的打包和發(fā)行',重點(diǎn)看圖32.13的下圖
          2007-08-10 08:37 | 陳剛

          # re: 在Eclipse RCP中使用Spring  回復(fù)  更多評(píng)論   

          @烏黑的大白馬
          請(qǐng)看文章前面的紅色文字,這篇文章實(shí)際已經(jīng)沒(méi)有意義。
          2007-08-10 08:39 | 陳剛

          # re: 在Eclipse RCP中使用Spring  回復(fù)  更多評(píng)論   

          為什么,我是安裝陳老師說(shuō)的那樣,但是為什么還報(bào)這樣的錯(cuò)誤,能給予說(shuō)明下嗎?
          !ENTRY org.eclipse.osgi 4 0 2007-09-21 09:14:12.015
          !MESSAGE Application error
          !STACK 1
          org.eclipse.core.runtime.CoreException: Plug-in TestPlug was unable to load class testplug.Application.
          at org.eclipse.core.internal.registry.osgi.RegistryStrategyOSGI.throwException(RegistryStrategyOSGI.java:165)
          at org.eclipse.core.internal.registry.osgi.RegistryStrategyOSGI.createExecutableExtension(RegistryStrategyOSGI.java:149)
          at org.eclipse.core.internal.registry.ExtensionRegistry.createExecutableExtension(ExtensionRegistry.java:759)
          at org.eclipse.core.internal.registry.ConfigurationElement.createExecutableExtension(ConfigurationElement.java:243)
          at org.eclipse.core.internal.registry.ConfigurationElementHandle.createExecutableExtension(ConfigurationElementHandle.java:51)
          at org.eclipse.core.internal.runtime.PlatformActivator$1.run(PlatformActivator.java:74)
          at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:92)
          at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:68)
          at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400)
          at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:177)
          at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
          at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
          at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
          at java.lang.reflect.Method.invoke(Method.java:585)
          at org.eclipse.core.launcher.Main.invokeFramework(Main.java:336)
          at org.eclipse.core.launcher.Main.basicRun(Main.java:280)
          at org.eclipse.core.launcher.Main.run(Main.java:977)
          at org.eclipse.core.launcher.Main.main(Main.java:952)
          org.eclipse.core.runtime.CoreException[1]: java.lang.ClassNotFoundException: testplug.Application
          at org.eclipse.osgi.framework.internal.core.BundleLoader.findClass(BundleLoader.java:402)
          at org.eclipse.osgi.framework.internal.core.BundleLoader.findClass(BundleLoader.java:347)
          at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:83)
          at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
          at org.eclipse.osgi.framework.internal.core.BundleLoader.loadClass(BundleLoader.java:278)
          at org.eclipse.osgi.framework.internal.core.BundleHost.loadClass(BundleHost.java:227)
          at org.eclipse.osgi.framework.internal.core.AbstractBundle.loadClass(AbstractBundle.java:1245)
          at org.eclipse.core.internal.registry.osgi.RegistryStrategyOSGI.createExecutableExtension(RegistryStrategyOSGI.java:147)
          at org.eclipse.core.internal.registry.ExtensionRegistry.createExecutableExtension(ExtensionRegistry.java:759)
          at org.eclipse.core.internal.registry.ConfigurationElement.createExecutableExtension(ConfigurationElement.java:243)
          at org.eclipse.core.internal.registry.ConfigurationElementHandle.createExecutableExtension(ConfigurationElementHandle.java:51)
          at org.eclipse.core.internal.runtime.PlatformActivator$1.run(PlatformActivator.java:74)
          at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:92)
          at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:68)
          at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400)
          at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:177)
          at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
          at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
          at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
          at java.lang.reflect.Method.invoke(Method.java:585)
          at org.eclipse.core.launcher.Main.invokeFramework(Main.java:336)
          at org.eclipse.core.launcher.Main.basicRun(Main.java:280)
          at org.eclipse.core.launcher.Main.run(Main.java:977)
          at org.eclipse.core.launcher.Main.main(Main.java:952)
          2007-09-21 09:15 | cj_829cai

          # re: 在Eclipse RCP中使用Spring  回復(fù)  更多評(píng)論   

          @cj_829cai
          unable to load class testplug.Application
          這一句報(bào)錯(cuò)是關(guān)鍵。說(shuō)明你的項(xiàng)目配置有問(wèn)題,導(dǎo)致找不到Application類(lèi)。
          2007-09-24 08:46 | 陳剛

          # re: 在Eclipse RCP中使用Spring  回復(fù)  更多評(píng)論   

          陳老師,有沒(méi)有簡(jiǎn)單一點(diǎn)的例題?
          如果有時(shí)間話能發(fā)一下嗎?
          為了這個(gè)問(wèn)題.我還專(zhuān)門(mén)買(mǎi)了你的書(shū)第二版里可惜沒(méi)有講到.
          caijin_001@163.com
          2007-09-24 10:03 | cj_829cai

          # re: 在Eclipse RCP中使用Spring  回復(fù)  更多評(píng)論   

          這次是找不到spring文件.一開(kāi)始我以為是導(dǎo)包的問(wèn)題,我確定包是沒(méi)有問(wèn)題的.我用一個(gè)測(cè)試類(lèi)已經(jīng)能正常使用spring.但是把這個(gè)正確的代碼拷貝過(guò)來(lái)就出問(wèn)題了
          .我是按照你說(shuō)的把類(lèi)加載器轉(zhuǎn)換了一下.還是出現(xiàn)這樣的錯(cuò)誤.急啊
          !ENTRY org.eclipse.ui.workbench 4 0 2007-09-24 09:55:44.635
          !MESSAGE Unable to create view ID MyCRP.view2: org/springframework/beans/factory/BeanFactory
          !STACK 0
          java.lang.NoClassDefFoundError: org/springframework/beans/factory/BeanFactory
          at com.view.TestView.seleteD(TestView.java:71)
          at com.view.TestView.createPartControl(TestView.java:55)
          at org.eclipse.ui.internal.ViewReference.createPartHelper(ViewReference.java:332)
          at org.eclipse.ui.internal.ViewReference.createPart(ViewReference.java:197)
          at org.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:566)
          at org.eclipse.ui.internal.PartPane.setVisible(PartPane.java:290)
          at org.eclipse.ui.internal.ViewPane.setVisible(ViewPane.java:525)
          at org.eclipse.ui.internal.presentations.PresentablePart.setVisible(PresentablePart.java:140)
          at org.eclipse.ui.internal.presentations.util.PresentablePartFolder.select(PresentablePartFolder.java:268)
          at org.eclipse.ui.internal.presentations.util.LeftToRightTabOrder.select(LeftToRightTabOrder.java:65)
          at org.eclipse.ui.internal.presentations.util.TabbedStackPresentation.selectPart(TabbedStackPresentation.java:394)
          at org.eclipse.ui.internal.PartStack.refreshPresentationSelection(PartStack.java:1144)
          at org.eclipse.ui.internal.PartStack.setSelection(PartStack.java:1097)
          at org.eclipse.ui.internal.PartStack.showPart(PartStack.java:1311)
          at org.eclipse.ui.internal.PartStack.createControl(PartStack.java:601)
          at org.eclipse.ui.internal.PartStack.createControl(PartStack.java:532)
          at org.eclipse.ui.internal.PartSashContainer.createControl(PartSashContainer.java:562)
          at org.eclipse.ui.internal.PerspectiveHelper.activate(PerspectiveHelper.java:244)
          at org.eclipse.ui.internal.Perspective.onActivate(Perspective.java:815)
          at org.eclipse.ui.internal.WorkbenchPage.onActivate(WorkbenchPage.java:2436)
          at org.eclipse.ui.internal.WorkbenchWindow$6.run(WorkbenchWindow.java:2616)
          at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:67)
          at org.eclipse.ui.internal.WorkbenchWindow.setActivePage(WorkbenchWindow.java:2597)
          at org.eclipse.ui.internal.WorkbenchWindow.busyOpenPage(WorkbenchWindow.java:658)
          at org.eclipse.ui.internal.Workbench.busyOpenWorkbenchWindow(Workbench.java:795)
          at org.eclipse.ui.internal.Workbench.doOpenFirstTimeWindow(Workbench.java:1437)
          at org.eclipse.ui.internal.Workbench.openFirstTimeWindow(Workbench.java:1388)
          at org.eclipse.ui.internal.WorkbenchConfigurer.openFirstTimeWindow(WorkbenchConfigurer.java:190)
          at org.eclipse.ui.application.WorkbenchAdvisor.openWindows(WorkbenchAdvisor.java:708)
          at org.eclipse.ui.internal.Workbench.init(Workbench.java:1085)
          at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1847)
          at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:419)
          at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
          at mycrp.Application.run(Application.java:18)
          at org.eclipse.core.internal.runtime.PlatformActivator$1.run(PlatformActivator.java:78)
          at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:92)
          at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:68)
          at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400)
          at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:177)
          at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
          at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
          at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
          at java.lang.reflect.Method.invoke(Method.java:585)
          at org.eclipse.core.launcher.Main.invokeFramework(Main.java:336)
          at org.eclipse.core.launcher.Main.basicRun(Main.java:280)
          at org.eclipse.core.launcher.Main.run(Main.java:977)
          at org.eclipse.core.launcher.Main.main(Main.java:952)
          2007-09-24 10:20 | cj_829cai

          # re: 在Eclipse RCP中使用Spring  回復(fù)  更多評(píng)論   

          謝謝陳老師.我在你的Hibernate中找到的答案,謝謝了
          2007-09-25 11:29 | cj_829cai

          # re: 在Eclipse RCP中使用Spring  回復(fù)  更多評(píng)論   

          @cj_829cai
          舉一推三,聰明
          2007-09-26 01:12 | 陳剛

          # re: 在Eclipse RCP中使用Spring  回復(fù)  更多評(píng)論   

          陳老是,還有一個(gè)問(wèn)題。不知道RCP里面能不能使用SWT的shell窗體?
          2007-09-29 18:07 | cj_829cai

          # re: 在Eclipse RCP中使用Spring  回復(fù)  更多評(píng)論   

          @cj_829cai
          你試過(guò)了嗎
          2007-09-29 20:54 | 陳剛

          # re: 在Eclipse RCP中使用Spring  回復(fù)  更多評(píng)論   

          我試過(guò)了。是可以用的。但是有一個(gè)問(wèn)題。就是shell窗口是沒(méi)有辦法,彈出需要在任務(wù)欄里點(diǎn)擊才能現(xiàn)實(shí)出窗體。不知道這是什么原因?
          2007-10-09 15:09 | cj_829cai

          # re: 在Eclipse RCP中使用Spring  回復(fù)  更多評(píng)論   

          @cj_829cai
          那是shell的參數(shù)沒(méi)有設(shè)置好。參考一樣本書(shū)SWT內(nèi)容中關(guān)于shell的介紹。
          2007-10-10 08:49 | 陳剛

          # re: 在Eclipse RCP中使用Spring  回復(fù)  更多評(píng)論   

          陳老師。能否把TitleAreaDialog變成非模式的窗口?
          2007-10-16 18:29 | cj_829cai

          # re: 在Eclipse RCP中使用Spring  回復(fù)  更多評(píng)論   

          com.wxxr.management.admin.console.AdminConsolePlugin;
          請(qǐng)教這一個(gè)包名是什么? 我沒(méi)找到相應(yīng)的jar文件。
          2008-06-18 19:04 | win

          # re: 在Eclipse RCP中使用Spring解析問(wèn)題  回復(fù)  更多評(píng)論   

          你好,我用你的方法,文件找到了。可是解析出現(xiàn)了不少問(wèn)題,求指導(dǎo)
          2014-05-20 09:15 | 王傳
          主站蜘蛛池模板: 陆河县| 安泽县| 富阳市| 团风县| 钟山县| 沧源| 红安县| 临夏县| 包头市| 淮南市| 百色市| 应城市| 垦利县| 江都市| 黑河市| 隆尧县| 乌兰浩特市| 汕头市| 孟村| 邵东县| 淮北市| 昂仁县| 株洲县| 武平县| 泽库县| 广昌县| 卢龙县| 大邑县| 仙居县| 临洮县| 霍林郭勒市| 麻阳| 克东县| 柳江县| 舟曲县| 景谷| 盘锦市| 张北县| 桐庐县| 介休市| 宁德市|