2011/09/28

Eclipse Plugin開發遇到No Schema Found的問題

開發 Plugin 時遇到一個問題,在設定 plugin.xml 內的 Extensions 時,遇到 no schema found for the 'org.eclipse.ui.views' extension point 這樣的訊息,而且右鍵點該 Extension 只能 New → Generic,無法建立對應的元件...

google 了一下之後發現原來跟 Eclipse plugin 的 library 有關,上官網查了一下後發現原來我用的 J2EE 版並沒有含 PDE/RCP 套件的 source code,所以也就沒有含 schema 和其他文件

既然知道原因,那就比較好解了,Classic 版的 PDE/RCP 套件是有含 source code 的,於是重新抓相同版號(這裡用 3.6.2)的 Eclipse 下來,將對應的 source code jar 檔複製到 Eclipse 安裝目錄/plugins 下就好了,個人是整個把 plugins 目錄覆蓋掉,懶人作法 ._.

怕有衝突的話最好先做個備份,或是用 import library 的方式把 Classic 版的 plugin library 加到 project 也行。

2011/09/26

java中的Class.this


首先先複習一下基本:
在 Java 的 Class 內宣告的 Class,稱為 Nested Class(巢狀類別)

Nested Class 又分為 staticnon-static 兩種,其中加上 static 宣告的就叫做 Static Nested Class;而 non-static 的 Nested Class 又稱為 Inner Class(內部類別)

Inner Class 還可以再細分為三種又是另外一個故事了,這邊就不提
那 Class.this 究竟是代表甚麼呢...
public class ClassThisTest {
	public static void main(String[] args) {
		OuterClass outerInst1 = 
				new OuterClass("Outer class no.1");
		OuterClass.InnerClass innerInst1 = 
				outerInst1.new InnerClass();
		
		System.out.println(innerInst1.toString()); 
											//Inner class
		System.out.println(innerInst1.outerToString()); 
											//Outer class no.1
												   
		OuterClass outerInst2 = 
				new OuterClass("Outer class no.2");
		OuterClass.InnerClass innerInst2 = 
				outerInst2.new InnerClass();
		
		System.out.println(innerInst2.outerToString()); 
											//Outer class no.2
	}	
}

class OuterClass {
	private String outerMsg;
	
	public OuterClass(String msg) {
		this.outerMsg = msg;
	}
	
	public String toString() {
		return outerMsg;
	}
	
	public class InnerClass {
		private final String innerMsg = "Inner class";
		
		public String toString() {
			return innerMsg;
		}
		
		public String outerToString() {
			//Class.this
			return OuterClass.this.toString();
		}
	}
}
簡單說就是 Inner Class 用來參照相依的 Outer Class 實體用的。

因為在 Inner Class 裡面用 this 關鍵字的話,將會指向 Inner Class 實體,所以若是需要參照 Outer Class 實體時,用 Class.this 的方式就可以了。


JadEclipse安裝步驟

這邊用的是 Eclipse Helios(3.6.x)

Plug-in 安裝
首先從上方選單列
Help → Install New Software...

開啟 Install 視窗後,按下 Add... 按鈕
Name 可隨意輸入,這邊用 JadClipse
Location 輸入 http://jadclipse.sf.net/update

然後 Install 視窗中間出現 JDT Decompiler Features 可勾選
只有 3.4 版的可選擇,與 3.6 似乎沒有相容性問題,選了之後就按 Next 開始安裝吧

Plug-in 設定
由於 plug-in 似乎只是連結 Jad 與 Eclipse 之間的橋梁
所以裝 plug-in 之前還得先裝 Jad (只是一個執行檔而已)
可以到這個網址去下載 JAD Java Decompiler Download Mirror
根據 OS 選擇對應版本後下載,解壓縮後放在隨意位置即可

一樣是上方選單列
Window → Preferences

如果安裝成功的話,在 Preferences 視窗依下面的順序應該可以打開 Jad 的設定頁面
Java → Decopilers → Jad

在 Path to decompiler 的欄位輸入 Jad.exe 的絕對路徑
然後重啟 Eclipse 即可