9910

          單飛

             :: 首頁 :: 聯系 :: 聚合  :: 管理

          #

          插件依賴只能是單向的關系,比如說PluginA依賴于PluginB,那么A中能引用B中的類,但是B就不能引用A中的 ,否則就是雙向依賴。在使用XStream這個包的時候,如果是不可能單獨封裝為一個插件的。這就造成了多個插件含有不同版本的Stream類。

          posted @ 2009-01-25 10:27 單飛 閱讀(217) | 評論 (0)編輯 收藏

          Plugin.properties放在plugin.xml的相同目錄下, Eclipse里面看國際化也是非常正確, 但是運行以后就是只顯示"%XXXX"這樣的字符串原來是因為

          Localization in RCP plugins is usually done by including translations in a property file and using their id in plugin.xml.

          I spend some time lately trying to understand why some translations were not used in my application although they were correctly displayed in PDE.

          Answer : when using plugin.properties, you MUST include the following line in the plugin manifest :

          Bundle-Localization: plugin

          Otherwise, PDE will show the translated text, but your app won’t.

          Strangely, I had to edit the manifest manually because I couldn’t find a way to enable plugin localization in PDE. Some other plugins of my application already had this line, but I don’t remember adding it. Maybe Eclipse templates have changed since I created my first plugins (using Eclipse 3.1).


          記得以前插件開發也有這個問題,不過忘記了。
          真是記性越來越差了。
          這個問題竟然困擾了我兩個星期。還好可以google到別人的解決辦法,今天在這里留個腳印。
          posted @ 2009-01-23 11:42 單飛| 編輯 收藏

          1.關于接口中聲明的變量

          public interface In {
          /*public static final*/ int a = 0;
          }
          public class TestIn implements In{

              /**
               * @param args
               */
              public static void main(String[] args) {
                  // TODO Auto-generated method stub
                  int i=0;
                  TestIn t = new TestIn();
                  i = t.a;
                  i = In.a;
                  i = TestIn.a;
              }

          }

          2.Exception
          public class LException extends Exception{

          }

          public class HException extends LException{

          }
          public class TestException {

              /**
               * @param args
               */
              public static void main(String[] args) {
                  // TODO Auto-generated method stub
                  try{
                      throw new HException();
                  }catch(HException ex){
                     
                  }catch(LException e){
                     
                  }
              }

          }



          posted @ 2009-01-19 23:54 單飛 閱讀(153) | 評論 (0)編輯 收藏

          如果在插件MANIFEST.MF中的Bundle-ClassPath設置了 “.”那就會導出生成為一個jar 文件。否則就是目錄形式。

          posted @ 2008-10-08 11:36 單飛 閱讀(237) | 評論 (0)編輯 收藏

           

          打包好的程序,發現在運行的時候和開發時候的表現不一致,僅僅靠推理很難發現問題,有沒有辦法調試呢?記得以前曾經做過遠程調試Jboss,大致原理應該相通的,照樣做了一下,果然行的通.

           

          首先需要在運行RCP程序的時候增加如下參數:

          -Xdebug

          -Xnoagent 

          -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n

          運行RCP程序.

          然后再使用Eclipse的遠程應用程序調試方式運行:

          設置好斷點后

          就可以像開發時候一樣來進行跟蹤調試.很容易找出問題來.


           

          posted @ 2008-10-07 19:46 單飛 閱讀(453) | 評論 (0)編輯 收藏

          // 用泛型實現通用數組的刪除操作
          package test;

          import java.lang.reflect.Array;
          import java.util.ArrayList;
          import java.util.List;

          public class Test1 {
               
          public static <T> T[] deleteArray(T[] items,int index) {
                  
          if (items == null || items.length == 0 || index < 0
                          
          || index > items.length - 1) {
                      
          return items;
                  }
                  T[] newItems 
          = (T[]) Array.newInstance(items.getClass().getComponentType(), items.length - 1);
                  
          if(index == 0){
                      
          // first
                      System.arraycopy(items, 1, newItems, 0, newItems.length);    
                  }
          else if(index == items.length - 1){
                      
          // end
                      System.arraycopy(items, 0, newItems, 0, newItems.length);
                  }
          else{
                      
          // middle
                      System.arraycopy(items, 0, newItems, 0, index);
                      System.arraycopy(items, index
          +1, newItems, index, items.length - index -1);            
                  }
                  
                  
          return newItems;
                  
              }
              
          /**
               * 
          @param args
               
          */
              
          public static void main(String[] args) {
                  
          // TODO Auto-generated method stub
                  
          // first
                  String[] first = new String[]{"0","1","2"};
                  String[] rt 
          = deleteArray(first,0);
                  printArray(rt);
                  
          // end
                  Integer[] end = new Integer[]{0,1,2};
                  Integer[]  rt1 
          = deleteArray(end,2);
                  printIntegerArray(rt1);
              }
              
              
          public static void printArray(String[] array){
                  System.out.println(
          "start ====================");
                  
          for(String s:array){
                      System.out.println(s);
                  }
                  System.out.println(
          "end ====================");
                  
                  List
          <String> a = new ArrayList<String>();
                  
              }
              
              
          public static void printIntegerArray(Integer[] array){
                  System.out.println(
          "start ====================");
                  
          for(Integer s:array){
                      System.out.println(s);
                  }
                  System.out.println(
          "end ====================");
                  
                  List
          <String> a = new ArrayList<String>();
                  
              }

          }
          posted @ 2008-09-23 21:44 單飛 閱讀(500) | 評論 (0)編輯 收藏

          我經常發現代碼里面充次著一些“畫蛇添足”的想法,尤其是MM寫的代碼,這好像就是因為思考停留在表面,不能深入到事物的本質造成的。因為她們在考慮問題的時候會將80%的精力放在表面,而用20%的精力來思考低層的實現。奧薩姆剃刀可以解決這個問題。

          奧卡姆剃刀(Occam's Razor, Ockham's Razor),又稱“奧康的剃刀”,是由14世紀邏輯學家、圣方濟各會修士奧卡姆的威廉(William of Occam,約1285年至1349年)提出。奧卡姆(Ockham)在英格蘭的薩里郡,那是他出生的地方。他在《箴言書注》2卷15題說“切勿浪費較多 東西去做用較少的東西同樣可以做好的事情。”

          這個原理稱為“如無必要,勿增實體”(Entities should not be multiplied unnecessarily)。有時為了顯示其權威性,人們也使用它原始的拉丁文形式:

          Pluralitas non est ponenda sine necessitate.
          Frustra fit per plura quod potest fieri per pauciora.
          Entia non sunt multiplicanda praeter necessitatem.

          事實上,只有前兩種形式見于他現存的著作中,而第三種形式則由后來的一位學者撰寫。威廉使用這個原理證明了許多結論,包括“通過思辨不能得出上帝存在的結論”。這使他不受羅馬教皇的歡迎。

          許多科學家接受或者(獨立的)提出了奧卡姆剃刀原理,例如萊布尼茲的“不可觀測事物的同一性原理”和牛頓提出的一個原則:如果某一原因既真又足以解釋自然事物的特性,則我們不應當接受比這更多的原因。

          對于科學家,這一原理最常見的形式是:

          當你有兩個處于競爭地位的理論能得出同樣的結論,那么簡單的那個更好。

          在物理學中我們使用奧卡姆剃刀切掉形而上學的概念。愛因斯坦的狹義相對論與洛侖茲的理論就是一個范例。洛侖茲的理論認為在以太中運動的尺收縮、鐘 變慢。愛因斯坦關于空—時變換的方程與洛侖茲方程在鐘慢尺短效應上一致,但是愛因斯坦和龐加萊認為以太不能根據洛侖茲和麥克斯韋方程組檢測到。根據奧卡姆 剃刀,以太就被排除了。

          這一原理也被用來證明量子力學的不確定性。海森堡從光的量子本性和測量效應中推出了不確定原理。

          史蒂芬·霍金在他的《時間簡史》中解釋說:我們仍然可以想像,對于一些超自然的生物,存在一組完全地決定事件的定律,它們能夠觀測宇宙現在的狀態 而不必干擾它。然而,我們人類對于這樣的宇宙模型并沒有太大的興趣??磥恚詈檬遣捎梅Q為奧卡姆剃刀的原理,將理論中不能被觀測到的所有特征都割除掉。

          但是“不能確定以太的存在”和“以太的不存在”都不能僅僅根據奧卡姆剃刀推出。它可以區分兩個能做出同樣結論的理論,但是不能區分其他可能做出不同結論的理論。實驗的證據仍然是必需的,并且奧卡姆本人支持經驗主義,而不是反對。

          厄恩斯特·馬赫提倡奧卡姆剃刀的一個版本,他稱作“經濟原理”,表述為:“科學家應該使用最簡單的手段達到他們的結論,并排除一切不能被認識到的 事物”。把它引入哲學就形成了實證主義哲學,即認為某物存在但無法觀測與根本不存在是一碼事。馬赫影響了愛因斯坦關于時空不是絕對的論述,但是他(馬赫) 也把實證主義應用到分子的概念。馬赫和他的追隨者認為分子是形而上學的概念,因為它們太小而不能被直接探測到。這種主張不顧分子論在解釋化學反應和熱力學 上的成功。具有諷刺意味的是,當使用經濟原理拋棄了以太和絕對參照系的時候,愛因斯坦幾乎同時發表了一篇關于布朗運動的論文,它證實了分子的實在性,這就 打擊了實證主義的使用。這個故事意味著,我們不能盲目使用奧卡姆剃刀。正如愛因斯坦在他的《自傳筆記》中寫道:

          即使是大膽而天才的學者也會因為哲學上的偏見而妨礙他認清事實,這是一個很有趣的例子。

          人們常常引用奧卡姆剃刀的一個強形式,敘述如下:

          如果你有兩個原理,它們都能解釋觀測到的事實,那么你應該使用簡單的那個,直到發現更多的證據。 對于現象最簡單的解釋往往比較復雜的解釋更正確。 如果你有兩個類似的解決方案,選擇最簡單的。 需要最少假設的解釋最有可能是正確的。

          ……或者以這種自我肯定的形式出現:

          讓事情保持簡單!

          注意到這個原理是如何在上述形式中被加強的。嚴格的說,它們應該被稱為吝嗇定律,或者稱為樸素原則。最開始的時候我們使用奧卡姆剃刀區分能夠做出 相似結論的理論?,F在我們試圖選擇做出不同結論的理論。這不是奧卡姆剃刀的本意。我們不用檢驗這些結論嗎?顯然最終不是這樣,除非我們處于理論的早期階 段,并且還沒有為實驗做好準備。我們只是為理論的發展尋求一種指導。

          這個原理最早至少能追溯到亞里士多德的“自然界選擇最短的道路”。亞里士多德在相信實驗和觀測并無必要上走得太遠。樸素原理是一個啟發式的經驗規 則,但是有些人引用它,仿佛它是一條物理學公理。它不是。它在哲學和粒子物理中使用的很好,但是在宇宙學和心理學中就不是特別好,這些領域中的事務往往比 你想象的還要復雜?;蛟S引用莎士比亞的一句話要勝過引用奧卡姆剃刀:“天地之大, 赫瑞修, 比你所能夢想到的多出更多”

          樸素是主觀的,宇宙并不總是像我們認為的那樣簡單。成功的理論往往涉及到對稱、美與簡單。1939年保羅·狄拉克寫道:

          研究者在把自然法則轉變為數學形式的時候,應該為數學的美而努力。對于簡單和美的需求往往是等價的,然而當它們發生沖突的時候,后者應該優先。

          吝嗇原理不能取代洞察力、邏輯和科學方法。永遠也不能依靠它創造或者維護一個理論。作為正確性的判別方法,只有邏輯上的連貫性和實驗的證據才是絕 對的。狄拉克的理論很成功,他構造了電子的相對論場方程,并用它預言了正電子。但是他并沒有主張物理學僅僅應該基于數學的美。他完全贊同實驗檢驗的必要 性。

          最后的結論來自愛因斯坦,他本身也是一位格言大師。他警告說:

          “萬事萬物應該盡量簡單,而不是更簡單。”

          作為著名的唯名論者,奧卡姆以此反對實在論,認為沒有必要在個別事物之外設立普遍的實體,因為這些實體既無邏輯自明性,又缺乏經驗證據。

          這一觀點促進了經驗科學擺脫神學的束縛,并為后來的邏輯經驗主義,特別是外延論者所重視。


          posted @ 2008-08-13 09:49 單飛 閱讀(275) | 評論 (0)編輯 收藏

          我只知道它屬于org.eclipse.pde.ui的擴展點org.eclipse.ui.perspectives,看來要好好研究一下這部分的代碼,才能解決隱藏Perspective,實現權限管理。

          參考了別人的代碼:
          看了看eclipse的源代碼,終于知道怎么關閉了:

          IWorkbench w=PlatformUI.getWorkbench();
          IPerspectiveRegistry pr=w.getPerspectiveRegistry() ;
          IPerspectiveDescriptor persdes=pr.findPerspectiveWithId("perspectiveID");

          WorkbenchPage p=(WorkbenchPage)w.getActiveWorkbenchWindow().getActivePage();
          Perspective persp = p.getActivePerspective();
          p.closePerspective(persdes,false,false);

          try {
          w.showPerspective("nextperspectiveID", w.getActiveWorkbenchWindow());
          } catch (WorkbenchException e) {
          e.printStackTrace();
          }

          關閉當前perspective,并打開一個新的perspective:

          IWorkbench w=PlatformUI.getWorkbench();

          ActionFactory.IWorkbenchAction closePerspectiveAction
          = ActionFactory.CLOSE_PERSPECTIVE.create(w.getActiveWorkbenchWindow());
          closePerspectiveAction.run();

          try {
          PlatformUI.getWorkbench().showPerspective("com.ibm.demo.saic.ui.views.NextPerspective", w.getActiveWorkbenchWindow());
          } catch (WorkbenchException e) {
          e.printStackTrace();
          }


          posted @ 2008-08-12 22:37 單飛 閱讀(196) | 評論 (0)編輯 收藏

          IBM Container for ActiveX Documents - Eclipse Version

          但是我發現如果使用它打開含有中文名稱的文檔,就會拋異常,看了它的代碼,發現

          JNIEXPORT jint JNICALL Java_com_ibm_rcp_activex_ActivexDocumentWidget_createControl
              (JNIEnv 
          * env, jclass that, jint hwndParent, jstring filename, jstring progid, jint hwndShell,
              jintArray fileMenu, jintArray containerMenu, jintArray windowMenu,
              jint indexHelpMenu, jstring helpMenuItemPrefix)
          {
              ADD_TO_TRACE();
              AFX_MANAGE_STATE(AfxGetStaticModuleState());

              
          if (NULL == progid)
              {
                  
          return 0;
              }

              
          const char * lpszProgid = env->GetStringUTFChars(progid, 0);

              
          const char * lpszFileName = NULL;

              
          if (NULL != filename)
              {
                  lpszFileName 
          = env->GetStringUTFChars(filename, 0);
              }

          這樣會引發jni的字符亂碼問題,在參考了《〈Java與C之間通過JNI傳遞中文字符串〉》的解決方案后
          做了如下的改寫:
          char* jstringToWindows( JNIEnv *env, jstring jstr );


          if (NULL != filename)
              {
                  lpszFileName 
          = jstringToWindows( env, filename );
                  
          //lpszFileName = env->GetStringUTFChars(filename, 0);
              }


          char* jstringToWindows(JNIEnv* env,jstring jstr)
          {
              
          int length=(env)->GetStringLength(jstr);
              
          const jchar* jcstr=(env)->GetStringChars(jstr,0);
              
          char* rtn=(char*)malloc(length*2+1);
              
          int size=0;
              size
          =WideCharToMultiByte(CP_ACP,0,(LPCWSTR)jcstr,length,rtn,(length*2+1),NULL,NULL);
              
          if(size<=0)
              
          return NULL;
              (env)
          ->ReleaseStringChars(jstr,jcstr);
              rtn[size]
          =0;
              
          return rtn;
          }

          成功編譯后,可以正常使用了。


          posted @ 2008-08-09 22:52 單飛 閱讀(351) | 評論 (0)編輯 收藏

          xlst ? 怎么玩啊?

          This won't delete the perspective if it is defined in an extension.
          The perspective defined in an extension can't be deleted in Eclipse 3.2.
          In Eclipse 3.3, it is possible to delete it using xslt, see http://wiki.eclipse.org/Product_Customization


          Snjeza

          Hiamansu S Swain wrote:
          Hi Ajay,

          Create this class in any package of your application and make some action on your UI side and run call this class....

          import org.eclipse.ui.IPerspectiveDescriptor;
          import org.eclipse.ui.IPerspectiveRegistry;
          import org.eclipse.ui.PlatformUI;

          public class DeleteUserPerspective {

          /**The Constructor**/
          public DeleteUserPerspective () {
          IPerspectiveRegistry iPerspectiveRegistry = PlatformUI.getWorkbench).getPerspectiveRegistry();
          IPerspectiveDescriptor perspectiveDescriptor = iPerspectiveRegistry.findPerspectiveWithLabel("<perpsectiveName>");
          try {
          iPerspectiveRegistry.deletePerspective(perspectiveDescriptor);
          } catch (Exception e) {
          System.out.println("=====DELETED=====");
          }
          }
          }


          Thanks
          Himansu


          posted @ 2008-08-01 15:56 單飛 閱讀(475) | 評論 (0)編輯 收藏

          僅列出標題
          共12頁: First 上一頁 4 5 6 7 8 9 10 11 12 下一頁 
          主站蜘蛛池模板: 广元市| 天等县| 商河县| 东至县| 彝良县| 响水县| 广德县| 辉南县| 舒兰市| 图木舒克市| 柘城县| 金山区| 五家渠市| 大渡口区| 罗定市| 大名县| 娄底市| 星座| 陆丰市| 车险| 乐陵市| 花莲市| 南汇区| 平原县| 都江堰市| 山阳县| 元江| 普陀区| 邵武市| 兴业县| 陆丰市| 嘉义市| 卢龙县| 龙井市| 牡丹江市| 双鸭山市| 新蔡县| 高淳县| 镇安县| 高安市| 巢湖市|