2010-11-05

SWT 避開與UI Thread打結的方式

非 UI Thread中若觸發 修改UI的動作會產生 
org.eclipse.swt.SWTException: Invalid thread access 的例外,避開的方式為:


Composite.getDisplay().asyncExec(new Runnable() {
@Override
public void run() {
if (!Composite.isDisposed()) {
/*加入修改Composite 內UI的動作*/
}
}
});

2010-10-25

ASP.NET GridView

做出可以指定欄位名稱欄位排序GridView:
//取得資料
private void loadData(string sortString){
DataTable dt = MyData.getAllDatas();
if (sortString != "")
        {
            dt.DefaultView.Sort = sortString;
        }
        GridView1.DataSource = dt;
        GridView1.DataBind();
}
//設定欄位名稱
private void generateTitle(DataTable dt){
string[] title = new string[] { "欄位A", "欄位B", "欄位C", "欄位D", "欄位E"};
        for (int i = 0; i < title.Length; i++)
        {
            dt.Columns[i].ColumnName = title[i];
        }
}
//GridView排序事件
protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
    {
        string d = e.SortExpression;//需要排序的欄位名稱
        string sort = (string)ViewState[d];
        if (sort == null || sort == "" || sort == " ASC")
        {
            ViewState[d] = " DESC";//[排序方式]
        }
        else
        {
            ViewState[d] = " ASC";//[排序方式]
        }
        loadSyncMark(d + (string)ViewState[d]);//"[欄位名稱] [排序方式]"
    }
//網頁載入的用法
 protected void Page_Load(object sender, EventArgs e)
 {
   loadData("");
 }

2010-10-18

執行外部程式小問題

有時候用Java執行外部程式或是將程式加入windows排程時,有些程式無法正常執行,雖然可以在工作管理員看到該處理程序也配置了記憶體,但CPU都沒有動作。

解決方式:
寫一個BAT檔,先將路徑移到該程式位置在執行。例如:想要執行 "C:\Hello\Hello.exe",就寫一個Hello.bat,內容為

cd C:\Hello
Hello.exe

 最後只需要執行Hello.bat, 這樣就不會因為該程式需要用到系統的環境變數而讓程式懸在那邊。

2010-10-02

難道是老人家專用!!!

不管昨天多麼晚睡,依然實現跟老婆約定的加班前先去運動,所以一大早起來就去信義運動中心報到,因為隻身一人實在太無趣便找了才剛收不久的二妹跟小弟一起晨泳,三人上到四樓看到入口擺脫鞋處,滿滿的拖鞋整齊的擺滿鞋櫃,心想 : 今天是有什麼活動嗎?竟然有這麼多人一大早這麼健康的來游泳。換完裝到了游泳池邊,我們看到了一個非常令人驚訝的畫面!!在泳池裡大約有50位老人家在游泳,SPA區大約有10位,冷熱區大約10位,而烤箱已經塞爆了,就這樣三個人帶著驚訝的表情做完暖身與淋浴後,還是你看我我看你的遲遲下不了水,最後我帶頭先衝,找到了一個只有5位老人家的水道跟老人們一起慢慢的游。其實跟老人家游泳還蠻困難的,因為一直以來都是被別人追,這次換我追老人,不是平常自己習慣的速度,所以動作不是很協調,但稍微練習一下就可以掌握。可惜的是,這次游泳只游了大約一小時候我們就撤退了,因為我因為怕踢到老人家所以一直游捷式,搞的手腳一下就酸了,通常是會去SAPSpa疏通一下再用烤箱烤一烤蒸氣蒸一蒸來回復HP值後再游他個兩百回,但今天實在是選到了老人家聚泳的時間,所以就打消念頭黯然的去加班了~~

2010-08-31

無法開始監視 global.asax 的變更

把vista的UAC關閉後再開啟
VS2008建置網站時出現了" 無法開始監視 global.asax 的變更" 的錯誤。

解決方法如下:
1.關閉UAC。
2.重新開機 。
 就這樣我花了一個上午的時間解決這兩個問題。

UAC好像不是一個開關自如的東西,所以關掉後就不要再開了。

2010-07-07

Life in a Day

2010-07-02

Word 與 奇妙的 XML

這次做專案需要生成一些word文件,想說以前有經驗用word另存成XML格式再用取代字的方式做。但這次的文件較之前複雜許多,要取代的欄位特別多並且有圖片需求。
要做的就三個部份
1. 取代文字的方式
2. 圖片要轉成Base64String
    3. 文件本身要加入須被取代的部分

前兩項很好解決,我這次在第三項碰了一鼻子灰~~
因為要取代的文字與圖片實在太多,所以就律訂要取代的文字是用"[數字]"來分別,在測試時只用少許的資料做測試所以都很成功,但一到完整的文件就發現怎麼會找不到[30]之類的錯誤,查看原始XML文件發現雖然在word裡看到是[30]但是在XML文件中"["跟"30"還有"]"中間竟然有其他,所以干擾了取代文字程式,欄位實在太多且夾雜的並非全相同(心想 :要我用手動去校正鬍子都長長了~~),再進一步分析為何到[30]才會發生這種錯誤呢??!!回想一下當初做文件因為中間不小心跳號所以又重編了,造成"[數字]"並非一次完成,所以word就會再增加來指定這次輸入的文字相關屬性造成中間夾雜的(心想 :要我重新一個一個重寫嗎??),但其實有個方法可以很快的解決這問題,就是全部複製然後貼上,這樣那些夾雜的就全部消失了(爺~~~~~萬歲!!!)。
    再來就是要取代圖的部分,原來word中加入的圖都會被轉成 Base64String ,而且不同圖框若加入的是相同圖片word的XML只會有一份資料,而該圖框會指向相同資料部分。所以在做取代文件的時候要先給每個圖框不同的資料來源,這樣轉成XML才可以區分取代的位置。

2010-04-12

uDig的Splash設定

.product的設定中選取Splash頁籤,需要設定兩個地方;
1. Location:
      指定你的splash.bmp是在哪一個Plug-in,可以點選Browse...按鍵選取,若沒有指定發佈的RCP程式無法知道你的splash.bmp的位置,就無法顯示。

2.Customization:
    可以選是否要加入progress bar與progress message,並指定其位置是在splash.bmp的哪裡,Text Color是指定message文字的顏色。

2010-04-08

uDig 發佈與加入jfreechart

為了要發佈uDig套件花了不少時間在比對eclipse 3.5跟uDig1.2RC之間的plugin版本,發佈前還套用新的SWT版本並且整合jfreechart來用。總共花了快要4天的時間才有點搞懂Eclipse RCP中的feature與plug-in的分別,也因為這樣這一次的問題才有解~~~

在uDig1.2RC發現有內附jFreeChart的套件,但開發時遇到了一個問題就是uDig本身是Eclipse RCP開發而成的,使用的UI套件並不是java的awt/swing而是SWT,jFreeChart的繪製工具一般而言都是畫在Swing GUI裡,所以我們使用的方法就是下在最新的jfreechart1.0.13版本,接著置換掉
\udig-sdk\plugins\net.refractions.udig.libs_1.2.0\lib 裡關於jfreechart的檔案、
 \udig-sdk\plugins\net.refractions.udig.libs.source_1.2.0\src\net.refractions.udig.libs_1.2.0\lib 裡jfreechart的原始碼,接著修改C:\java\target\udig-sdk\plugins\net.refractions.udig.libs_1.2.0\META-INF\MANIFEST.MF檔案,的Bundle-ClassPath:將jfreechart相關的jar都加入,這樣就可以開心的使用新版的JFreeChart在SWT套件裡。

發佈的時候在發佈時會有出現找不到plug-in的錯誤,但是怎麼用都不對,最後再看了eclipse\plugins與udig-sdk\plugins裡面的jar差異,終於在每換一個檔案重開一次eclipse以讓target可以完整的更新後發佈成功,以下列出換掉的檔案與資料夾
資料夾:
org.eclipse.rcp_3.5.1.R35x_v20090811-9SA0FxVFqE70OL1ARMrfcO6e7BA6
org.eclipse.rcp.source_3.5.1.R35x_v20090811-9SA0FxVFqE70OL1ARMrfcO6e7BA6
檔案:
org.eclipse.swt.win32.win32.x86.source_3.5.1.v3555a.jar
org.eclipse.swt.win32.win32.x86_3.5.1.v3555a.jar
org.eclipse.swt_3.5.1.v3555a.jar
org.eclipse.core.expressions.source_3.4.100.v20090429-1800.jar
org.eclipse.core.expressions_3.4.100.v20090429-1800.jar
org.eclipse.osgi.source_3.5.1.R35x_v20090827.jar
org.eclipse.osgi_3.5.1.R35x_v20090827.jar
org.eclipse.jface_3.5.1.M20090826-0800.jar
org.eclipse.ui_3.5.1.M20090902-1000.jar
org.eclipse.ui.workbench_3.5.1.M20090826-0800a.jar
org.eclipse.rcp.source_3.5.0.v200909170800.jar
org.eclipse.rcp_3.5.0.v200909170800.jar
org.eclipse.equinox.app_1.2.0.v20090520-1800.jar
org.eclipse.equinox.app.source_1.2.0.v20090520-1800.jar
org.eclipse.equinox.preferences.source_3.2.300.v20090520-1800.jar
org.eclipse.equinox.preferences_3.2.300.v20090520-1800.jar
以上的檔案都是udig-sdk提供的,因為他跟eclipse的plugin相沖,所以用eclipse的pluring的版本,這樣就可以發佈成功了。