Feeling

              三人行,必有我師焉

             ::  :: 新隨筆 :: 聯系 ::  :: 管理 ::
            185 隨筆 :: 0 文章 :: 392 評論 :: 0 Trackbacks

          #

          網上關于Eclipse Fragment的資料比較少,引用Eclipse Wiki的一段話:

          An Eclipse Fragment is a way of putting your own classes into the "class loader" of another package (basically, it's as though your class was actually in the other package). If you combine this ability of a Fragment with the notion of a plugin's classpath ordering, then you can force your class to load before a like-named class in the original package.

          簡而言之,Fragment可以利用Eclipse平臺的ClassLoader機制替換原有Plugin的某些文件,以便實現自己的功能。如果僅僅是因為Plugin擴展,而需要替換自己項目的某些Plugin,可以參考文章:

          http://wiki.eclipse.org/Steps_to_use_Fragments_to_patch_a_plug-in  (來之不易,感興趣的可以收藏下)

          讀完這篇文章,你大概就應該能夠了解到Fragment的實現分為兩部分:Host 和 Patch。這兩部分對應的plugin的manifest.mf文件都需要做特殊處理,對于Patch的build方式也要特殊處理,那就是build出來的plugin jar里放置的不是松散的class文件,而是一個特殊的jar文件,這個 jar 文件定義在Host plugin的manifest.mf 的classpath里面。

          通常情況下,按照這篇文章的做法是沒有問題的。但是在開發階段,有一種情況可能無法實現class的替換。

          我公司的項目是使用perforce進行項目版本控制的,但是perforce比較傻,有些重要的功能沒有實現,而又很關鍵,因此我想自己針對perforce的eclipse plugin做一個fragment,添加自己想要的功能。但是這個plugin沒有source code,而我自己的hack也是反編譯class文件進行的。所以在我的work space里,并沒有Host plugin的 project。結果按照這篇文章的做法,始終不能在workbench debug的狀態下,正確load我hack過的class。因為在代碼模式下面是可以正確load的,而現在沒有代碼,在數次檢驗無果之后,只能針對ClassLoader去思考了。Host文件里要求一個jar文件,我就用PDE 將 fragment export出來,把Fragment plugin jar 包里包含的那個 jar 文件解壓出來,放到 patch project 里,然后重新Debug, OK,這次果然沒問題了。一個小小的Class Loader問題,真的能夠要人命呀……這應當算是Eclipse的一個bug吧,除非是對一個Plugin進行hack,否則一般也不會碰到這種情況。普通的項目開發,肯定會包含Host Plugin的Project。

          我的經歷權且當做飯后談資,不足為慮。我這兒想說的是Fragment機制非常好用,也易于Plugin擴展。比如你的項目分為Open Source 和 Commercial 2種的話, Commercial 部分也可以通過Fragment來實現,不一定需要走Extension Point路線。由于網上相關文章不多,還需要自己多多研究,了解其機制。

          posted @ 2009-09-10 16:42 三人行,必有我師焉 閱讀(1745) | 評論 (0)編輯 收藏

          自定義控件通常是從一個Composite或者Canvas繼承而來,但是缺省狀態下,這兩個控件都無法通過鍵盤的Tab鍵得到焦點。通過對SWT的debug,我發現要實現該事件,必須滿足一個必要條件:為自定義控件安裝一個KeyEvent的監聽器

          實際上我個人認為這出自于SWT的實現者自己的考慮,可能認為如果沒有KeyListener,也就意味著沒有Key的操作,那么也無需通知Travserse事件,Travserse事件的前提就是Key操作。但是在某些特定情況下我們不需要KeyListener,也可以模擬出KeyEvent的效果,比如通過TraverseListener的keyTraversed方法。總而言之,想通過鍵盤為某一個自定義控件獲取焦點,就老老實實的給控件加一個KeyListener吧。

          此處附加一些和Traverse相關的小知識:

          1、如何通過鍵盤的Tab鍵跳出 Multiple Style 的Text?
                  請使用 Ctrl+Tab 組合鍵。

          2、如何通過鍵盤操作讓上一個控件獲取焦點?
                  請使用 Shift+Tab 或者 Ctrl+Shift+Tab 組合鍵。

          3、Button 可以通過回車鍵和空格鍵激活。所以如果有些地方無法使用回車鍵(比如按鈕在Dialog中),可以考慮使用空格鍵。

          4、一些特殊的KeyCode:
                  回車鍵:SWT.KEYPAD_CR
                  小鍵盤的回車鍵:SWT.TRAVERSE_RETURN
                  方向鍵:SWT.ARROW_UP,SWT.ARROW_DOWN,SWT.ARROW_LEFT,SWT.ARROW_RIGHT
          posted @ 2009-04-07 11:22 三人行,必有我師焉 閱讀(2250) | 評論 (2)編輯 收藏

          項目地址:http://findbugs.sourceforge.net/

          用于分析項目代碼,自動發現項目潛在Bug,萬中無一的好東西,絕對值得下載一試,有興趣的自己研究。
          TeamLeader和PM 強烈推薦,用于Code Review。
          posted @ 2009-02-16 00:02 三人行,必有我師焉 閱讀(2882) | 評論 (5)編輯 收藏

          做不下去了,Vista快把我逼瘋了,啥都不支持,隨意取消n多API,開發人員能做的事情太有限了,Vista你到底想干什么?

          看一看MSDN,全是抱怨Vista的。管理員給出的答案就是按照兼容XP的方式運行,這算哪門子解決方案呀。

          Have you tried running your application elevated? (Right Click->Run As Administrator) If this doesn't work try applying an XP SP2 Compatibility shim from the Compatibility Tab in the properties dialog. (Right Click->Properties | Compatibility).

          Let me know if this works.

          Thanks!


          怒呀!!!!!!!

          從Win3.1 到 Vista,沒有哪個版本比Vista更失敗的,無論是從用戶角度,還是從開發角度。微軟是不是想倒閉不做了?
          posted @ 2008-12-05 18:16 三人行,必有我師焉 閱讀(2306) | 評論 (5)編輯 收藏

          沉寂了一段時間,現在繼續SWT Win32 Extension的開發,說實話,最近的進展挺失敗的。Black Glossy效果我發現在某些機器上的顯示效果非常的卡,我自己的機器卻沒有任何問題。另外就是我最近在XP下實現了Window Mixer API,用來管理系統聲音。Win98,2000,XP都沒有問題,結果Vista讓我郁悶了,Vista居然取消了Mixer,我哭呀。以下是微軟員工給出的答案:

          That's because the mixer APIs are virtualized on Windows Vista - you don't get to see the real audio hardware by default, only a virtualized version.  We did this because the vast majority of applications that used the mixer APIs were using them to control their own volume, which is quite rude (it says "I own the box, no other sounds on the system matter").

           You have two choices.  The first is to run your application in XP compatibility mode, in which case you'll be able to access the real audio hardware (please note: you'll see exactly what the hardware provides, which may lead to surprising results).

           The other choice is to use the new Vista audio engine APIs.  either the IAudioEndpointVolume API which allows you access to the master volume for each of the audio endpoints on the machine.  If you really need to access the actual audio controls the IDeviceTopology interface will allow you direct access to the various controls on the audio hardware.

          沒脾氣了,只能專門為Vista實現一套簡單的API了。
          posted @ 2008-10-23 18:25 三人行,必有我師焉 閱讀(2392) | 評論 (5)編輯 收藏

          最近做了一個可視化編輯器相關的項目,采用了GMF。現在項目即將進入尾聲,以后可能不再接觸這個東西,so在還沒有忘掉之前,將經驗記錄下來以供大家參考。 當然做這個項目之前,我對GMF,EMF一無所知,只是對GEF有所了解,所以可能會有些囫圇吞棗的感覺,但是相信我的理解還是會對各位有所幫助。

          GMF其實是一個整合了GEF,EMF的自動化生成代碼的項目。使用GMF,可以快速的生成一個包含可視化編輯器的項目,這一點網上有文章介紹:15分鐘學會GMF。15分鐘是夸張了一點,不過15天完成一個可視化項目,對一個熟練的GMF程序員來說,卻絕對不是什么難事。但是既然使用了GMF框架,你就不得不面對以下幾個問題:

          一、既然是框架,自然要遵守框架的規則,GMF是模式驅動設計的,也就是說必須建好模型,才能進行下一步的開發工作。但是國內很多項目,需求總是不斷更新,這種情況下,不要輕易使用GMF。
          二、使用GMF框架,自然不具備GEF的靈活性,很多地方都被限制住了,不適合做靈活性非常大的圖形設計。
          三、不得不忍受GMF里大量的bug。

          我比較過GMF1.0,2.0,2.1三個版本,其中1.0完全不能容忍,2.0比較傻,2.1還過得去,所以GMF還是值得大家期待的,畢竟是越做越好。


          一個比較簡單的GMF流程編輯器

          個人感覺GMF非常適合做流程編輯器,主要是圖形要求簡單,并且適合GMF自動布局,兼之對模型要求不高。

          在學習GMF之前,有必要研究一下GEF和EMF,其中GEF是必須要有所了解的,而對EMF要求不算太高,能建一個ecore模型,了解emf的commandstack就夠了(其實我本人不太喜歡EMF,我更喜歡用自己的模型框架)。

          GMF的學習周期大概2周左右,上手到熟練大概需要1個月的時間(我自己的學習周期),當然這期間會碰到各種各樣的技術問題,針對不同的case,碰到的問題也會不一樣,而我這個系列的文章,主要就是把我所遇到的問題陳列出來,并提供一個解決之道。

          附GMF相關資料:
          八進制:GMF常見問題
          GMF Newsgroup Q and A
          posted @ 2008-09-04 14:52 三人行,必有我師焉 閱讀(2553) | 評論 (4)編輯 收藏

          在Birt Designer中,Binding 是無處不在的,如何正確的是用Birt的Binding呢?首先我們需要知道Birt的Binding Type。

          Birt的Binding type隨著Birt的版本的升級而越來越豐富,早期的Birt版本只有2種類型:為自己創建一個Data Column Binding,和使用Container的Data Binding,隨著CrossTab的出現,進而出現了Cube,ReportItem Reference Binding的概念。

          普通的Binding,一般是通過屬性編輯器的BindingPage來創建,可以set一個Data set,然后自動創建一個Binding列表。Crosstab和Chart兩種類型的Report Item 可以不依賴于Data set,而采用Cube來作為Bingding源。而ReportItem Reference 的概念更是簡便了Binding的生成,我們可以讓一個ReportItem 直接引用另外一個ReportItem的Binding,而非僅僅是Container的Binding,當然既然是引用,那么你是無法編輯這些Binding的,而且被引用的ReportItem必須包含一個名字,有些ReportItem比如Table本身是可以不設名字的,但在這個地方你就要加上了。

          再來說說Binding的設置,我們可以通過Binding Dialog和Binding Page來設置,這兩種設置是不同的,如果在Binding Dialog上添加一個Binding,那么這個Binding是添加到這個Report Item的BindingHolder身上,如果在 Binding Page上設置,則Bindnig會添加到自身,讓自己成為BindingHolder。
          posted @ 2008-07-04 11:47 三人行,必有我師焉 閱讀(2617) | 評論 (1)編輯 收藏

          通過打開Birt透視圖,然后Reset至缺省的Layout,我們能夠看到基本的一些View和一個主要的報表可視化編輯器。

          先來說一下View,Birt主要的View包含7塊:

          左上角包含3個視圖,Palette,Data Explorer和Resource Explorer,Palette里放置了報表常用的可視化組件,直接將這些組件拖到報表設計器的時候,這些組件并沒有作特殊的初始化處理,而從Data Explorer里向設計器拖入一個Dataset會自動生成一個Table,拖入一個Cube會生成一個Crosstab,拖入一個Dataset Column會生成一個DataItem。Data Explorer主要是用來管理和顯示數據源。Resource Explorer 老版本里是Library Explorer,新版本則變更為了Resource Explorer,用來特別顯示Library,CSS文件,其他文件則不進行特殊處理。

          左下角有2個視圖,包含Navigator視圖和Online視圖,Navigator視圖是用來建立Birt項目用的,如果是Birt Rcp版本,我們則看不到這個視圖,這是IDE版本專有的一個視圖,在Rcp版本里沒有Project這個概念,直接以文件的形式進行管理。Outline是Birt里較為重要的視圖,所有的報表部件都會在這個View里顯示并會隨著報表的變化實時刷新。

          右下角包含了Property Editor 和 Problems兩個視圖, Property Editor 用來編輯每個可視化報表元素的屬性,一般比較常用的屬性都會在前幾個Tab頁里,但是有些屬性前幾個Tab頁里都沒有,這時候需要選擇Advanced這個Tab頁,它里面包含了這個元素所有可用的屬性,如果連這兒也沒有,那么說明該元素不存在你想要的屬性。Problems視圖則用來顯示報表收集到的一些問題,如果報表校驗的時候發生錯誤,會在此處顯示出來。

          以上的那些視圖屬于缺省視圖,但還有幾個視圖也比較有用,一個是Error log視圖,一個是Example視圖。Error log視圖主要是開發用的,當你使用Birt進行二次開發的時候,難免會碰到一些bug,當你感覺有問題的時候,不妨打開error log視圖,只要Birt捕捉到了異常,一般都會顯示在這個視圖里。而Example視圖里提供了各種各樣的視圖,可以Open 和 Save, Open的時候會自動幫你在workspace里建立一個項目,以便你瀏覽該項目文件。Save則是把這個Example保存到本地某個目錄。

          說完視圖,再來看看Birt可視化的報表設計器,這個設計器包含了五個部分:Layout,Master Page,Script,XML Source,Preview。

          Layout為設計器的主要部分,只要通過可視化的拖拽,一個報表就會被自動生成出來,當然要想靈活運用報表設計器,就必須對各個組件的屬性了如指掌,Birt提供了豐富靈活的屬性供用戶選擇。MasterPage主要用來設置頁眉頁腳,以及打印顯示之類的功能。Script頁面,當你在Layout頁面里選中一個元素之后,切換到Script頁面,就可以對這個元素進行腳本編碼,主要用來監聽各種事件,使用Javascript,在采用Web顯示里,這些腳本會生效。XML Source則是將這張報表背后的XML source顯示出來,用戶如果覺得自己對Birt很熟,可以直接在這兒手工修改代碼。Preview則是預覽Birt報表,Birt會啟動Tomcat顯示Web運行效果。

          基本上Birt還是比較強大的,基本的功能一應俱全。可能你會發現缺少一些更高級花哨的功能,比如flash之類的,其實怎么說呢,不是Birt沒有,而是開源版的沒有,這個功能在Birt商業版里,可以在 http://www.actuatechina.com/download.php 下載專業版試用。如同IBM,這是這類公司特有的策略,免費上面做收費。喜歡的話,可以試一下專業版,呵呵,可惜網上找不到破解版。

          posted @ 2008-06-20 11:48 三人行,必有我師焉 閱讀(3831) | 評論 (1)編輯 收藏

          Eclipse3.4馬上就要Release了,相信Eclipse的fans都已經開始翹首以待,望穿秋水了。不過現在的RC版本用得很不爽呀,性能非常差,Eclipse的慣例就是最后一個月的工作基本上就是對性能做優化,以達到最佳使用效果。

          隨著Plugin的增多,Eclipse采用了特殊的策略,增加了一個子目錄dropins,用來放用戶新增加的plugin,而原有的plugins目錄,則基本用于系統基本功能,2者的區別就是,前者可以任意添加刪除,后者則基本上是一個ReadOnly的狀態,添加了就不能再作修改了,Eclipse會將每一個添加的plugin記錄下來,以后啟動就不再檢查這些plugin了。

          不過對于我來說,我一直都習慣于使用plugins目錄,下了一個插件直接解壓,就直接覆蓋安裝到plugins目錄了,而且有一些plugin不支持dropins目錄,必須在plugins目錄下才能正常工作。不過一旦插件安裝失敗,想再reset就比較麻煩了。Eclipse不會自動恢復到初始安裝狀態,經過測試,找到了一個解決方案,用原始的eclipse的文件替代2個目錄:configuration和p2目錄。plugins文件位置記錄在configuration\org.eclipse.equinox.simpleconfigurator\bundles.info里,p2目錄里則記錄了更多的初始化信息。要想Reset Eclipse3.4,這兩個目錄必須被恢復到初始化狀態,然后就可以正常使用了。

          posted @ 2008-06-17 22:30 三人行,必有我師焉 閱讀(7823) | 評論 (5)編輯 收藏

          最近的項目需要使用報表,因為是RCP應用,所以選擇了Birt,用了一下,感覺還可以,就是網上資料少了點,不過以前也研究過一些Eclipse相關技術,這些都不重要了,找了SDK版本Debug,啥研究不出來?

          BIRT是一個Eclipse-based開放源代碼報表系統。它主要是用在基于Java與J2EE的Web應用程序上。BIRT主要由兩部分組成:一個是基于Eclipse的報表設計和一個可以加到你應用服務的運行期組件。BIRT同時也提供一個圖形報表制作引擎。

          官方主頁:http://www.eclipse.org/birt
          官方BBS支持:http://www.actuatechina.com/forum2.html

          基本上來說Birt功能還是很強大的,支持時下比較流行的WebService,Ajax技術,既可用于Web,也可以用于桌面,更新也算穩定,基本上遵循Eclipse的開發步驟,一個一個大版本,同時支持腳本調用,debug開發等等。唯一不足的就是中國的國情支持得還不夠完善,畢竟中國比較特殊,我以前給公司做黨務報表,要按照紙質報表畫,一分一毫都不能變差,那個變態呀,在電腦上畫報表還是拿尺子量。

          剛剛開始用,慢慢研究,看了下Birt自帶的Example,的確是很強大,做得也很漂亮,自己試著創建一個報表也很簡單,希望能夠比較快的上手吧。

          在網上找了一些資源:
          http://blogger.org.cn/blog/more.asp?name=sixsun&id=13933 BIRT 中文指南
          http://www.springside.org.cn/docs/reference/Birt.htm BIRT報表
          http://www-128.ibm.com/developerworks/cn/opensource/os-ecl-birt/ Birt的IBM DW的中文教程
          http://download.eclipse.org/birt/downloads/demos/FirstReport/MyFirstReport.html Birt Flash Demo.
          posted @ 2008-06-12 12:02 三人行,必有我師焉 閱讀(6213) | 評論 (8)編輯 收藏

          僅列出標題
          共9頁: 上一頁 1 2 3 4 5 6 7 8 9 下一頁 
          GitHub |  開源中國社區 |  maven倉庫 |  文件格式轉換 
          主站蜘蛛池模板: 平度市| 正宁县| 闸北区| 唐海县| 锦州市| 武鸣县| 彭泽县| 丰顺县| 通江县| 昭觉县| 库尔勒市| 磴口县| 洞头县| 栖霞市| 当涂县| 湛江市| 南丰县| 余姚市| 富川| 碌曲县| 宜州市| 新郑市| 卓资县| 香港| 达日县| 昌吉市| 轮台县| 新余市| 灵武市| 上饶市| 绥江县| 长葛市| 尼勒克县| 文昌市| 庆阳市| 长春市| 黄浦区| 增城市| 施秉县| 开阳县| 红桥区|