2010年9月2日 星期四

瀏覽器自動偵測網站是否具有RSS訂閱

明明都是具有RSS訂閱的網站,為何瀏覽器會有偵測不到的問題呢?其實差別在於網站原始碼<head>標籤內是否具有<link>標籤。

2010年8月25日 星期三

將 Java swing 的 JFrame 縮小至系統托盤上

由於本次專題內會使用到定期更新的功能,必須將系統常駐,但又不可能總是縮小在工作列上,所以這次使用 SystemTray、 TrayIcon ,以及各種觸發事件傾聽來達到縮小至系統托盤上的效果:

2010年8月19日 星期四

Java swing 圖形介面設計時的小提醒

目前專題使用的視窗布局管理有「GirdBagLayout 格群佈局管理員」與「null 不使用視窗布局管理」,這兩個布局管理在使用有許多不起眼的小設定,但這些設定卻足以改變整個布局的外觀:
 (以下均為操作時發生的問題,實際上是否具有該項特性仍需再次測試)

2010年8月18日 星期三

phpMyAdmin 開啟關聯式資料庫

因為我們所學的資料庫系統,都會使用到關聯式資料庫,以方便利用關聯式運算來取得所需資料,但是 phpMyAdmin 預設是不會開啟關聯式資料庫的功能,於是需要使用者手動開啟功能。

以下使用的套件為 appserv-win32-2.5.10 ,其中內部的 phpMyAdmin 版本為 2.10.3 。

2010年8月9日 星期一

自動抓取 Html 的網站編碼

我之前是設計使用者在輸入網址時,也必須輸入網站編碼,但除非從瀏覽器的工作列上選擇「檢視」-> 「編碼」來查看,不然一般使用者是不會在乎網站的編碼,反正能正常顯示就好。於是我必須要加入自動偵測的方式,代替使用者輸入網站編碼。

2010年8月5日 星期四

JComboBox 下拉式選單的注意事項

雖然 JComboBox 也可利用觸發事件來處理所選擇的選項,但實際上跟按鈕的觸發事件略有不同。例如單單選取某個選項,就會觸發兩次 itemStateChanged 的事件,原因在於 itemState 有兩種,各為 ItemEvent.DESELECTED (已選擇變成未被選擇),以及 ItemEvent.SELECTED (未被選擇變成已選擇)。故在 itemStateChanged 事件內再加入 e.getStateChange() 來判斷目前狀況,如下述程式碼:

2010年8月1日 星期日

另一種解析 Xpath 的套件

上次在 利用 Xpath( Xml Path Language XML查詢語言)來達到搜索功能 這篇文章中,是使用 xerces 這個額外下載的套件,實際上 JDK 也有內建 Xpath 的套件,就目前測試結果,兩者並無特別差異,但說不定在更後期的測試過程中,可能會有較明顯的差異。其程式碼如下:

2010年7月28日 星期三

DOM NodeList 動態更新之注意事項

若我們利用 NodeList  取得節點集合後,若新增或刪除該集合內的節點,則 NodeList 馬上會進行更新,這就是 NodeList 具有隨時保持自身更新的特性,我們用簡單的例子來說明這項特性:

2010年7月26日 星期一

在 Java 內使用 SQL 指令儲存 ' \ ' 字元的注意事項

由於 ' \ ' 在 Java 與 SQL 內均判定為跳脫字元,故若想利用 Java 連結 SQL 後,在資料庫內儲存跳脫字元 ' \ ',則除了在 Java 內使用 " \\ " 來表示 ' \ ' ,還要在輸入 SQL 指令時再使用 " \\ " ,故實際寫法為:

Java 物件陣列化

雖然這是很基本的問題,但當時卻卡了快半天才搞定,主因在於當該物件具有建構元時,要該如何讓該變數具有設定建構元且又有陣列化的方法,下列是簡單的陣列宣告:

int[] i = new int[2];   // 宣告 int 且陣列大小為2的變數 i
i[0]=1;    // i[0]初值為1
i[2]=2;    // i[1]初值為2

上面的程式碼應該對大家來說是小菜一疊,下列則是使用具有建構元的 class 產生物件並陣列化:

2010年7月22日 星期四

放棄 Neko HtmlParser ,改用 Cobra HtmlParser 解析網頁

之前發佈的文章 使用 Neko HtmlParser 產生 Html DOM ,發現到 Neko HtmlParser 經常發出:

Exception in thread "main" org.w3c.dom.DOMException:
HIERARCHY_REQUEST_ERR:
An attempt was made to insert a node where it is not permitted.

2010年7月19日 星期一

字串比較問題

假設我們從 DOM 中取出 的 href 屬性值時,照理說會透過比較 DOM 所回傳的屬性名稱是否與 href 相等,進而取出 href 屬性值。( i 和 j 為迴圈變數)

2010年7月18日 星期日

利用 Xpath( Xml Path Language XML查詢語言)來達到搜索功能

雖然我們學會了 Xml DOM 與 Html DOM ,但當 DOM 內容龐大時,要如何找出我們所需的節點內容呢?此時就能使用 Xpath( Xml Path Language XML查詢語言)來達到快速查詢的功能。

Xpath 本身就是一種 Xml 技術的查詢語言,在1999年11月16日成為 W3C 的建議規格,我們可利用 Xpath 查詢語言與運算式當作搜索條件,由於 Xpath 語言內容較為簡單,故在此就不再多作敘述,有興趣可查詢參考資料的內容。以下為 Java 使用 Xpath 的程式碼:

使用 Neko HtmlParser 產生 Html DOM

這次專題所選用的 HtmlParser 是採用有點歷史的 Neko HtmlParser + xerces ,其中 Neko 作者本身是 IBM 的 xerces 團隊的主力開發者,對 DOM 解析領域相當精深,再加上 Neko HtmlParser 具有不錯的 Html 標籤解析與清理效果。雖然我在最近一個禮拜尋找與測試其他的解析器,例如最多人使用的 HtmlParser 以及較為冷門的 Cobra HtmlParser ,但仔細比較之後,還是 Neko HtmlParser 較為好用。

2010年7月16日 星期五

Java 使用 import 載入套件時的注意事項

不同於 #include 將檔案內容載入進來,Java的 import 只是請編譯器幫我們在會使用到的 class 或 method 上加註套件名稱,例如我們要使用 Document 和 Node 的 class 則可以使用下列兩種寫法:

2010年7月7日 星期三

將 DOMSource 匯入 外部DTD

本次專題在 XML 的存取與修改上,是使用 TransformerFactory 的套件,而該套件的 Transformer 物件內含的 transform(Source source ,Result  result) 轉換函數,在 source 為 DOMSource 時,是無法順利寫入 外部DTD 。因為光是使用 DOMSource內的 setSystemId() 來進行設定,是無法真正將 外部DTD置入,故需要利用 Transformer 物件內的 setOutputProperty(String name,String value) 來強制 DOMSource變更設定。

產生具有 外部DTD 的 Document 文件

一般建立 Document 文件無非是使用文件檔案載入 documentbuilder.parse(File); ,或是產生空白的 Document 文件 documentbuilder.newDocument();  ,然而 org.w3c.dom 套件 提供我們產生具有 外部DTD 的 Document 文件,就是使用 DOMImplementation 介面,其方式如下:

2010年7月5日 星期一

XML 載入 DOM 時, DTD 的存放位置與顯示方式

當 XML 載入 DOM 時,我們將所有資料放置在 Document 物件內,若要查看 XML 內的 DTD(Document Type Definition)資料內容,必須先行宣告 DocumentType 物件,並使用 Document 內的函數將 DTD 載入至 DocumentType內,再利用 DocumentType 內的 getInternalSubset() Method 加以顯示,如下列程式範例:

2010年7月2日 星期五

Java 視窗佈局管理 - GirdBagLayout 格群佈局管理員

原本設定視窗時,必須要利用 setBounds(int x,int y,int weight,int height) 來慢慢調整,尤其單位是使用 pixels ,在操作上十分麻煩,故改用 GirdBagLayout 來管理元件間的佈置。雖然 GirdBagLayout 是所有視窗佈局管理員內操作最為複雜的,但操作熟練以後,發現元件間的佈置更為方便了。

事件處理的重複註冊問題


起初我將各個功能視窗的生成,分別製作成 method 以方便管理,並自然而然在各 method 內幫元件進行事件處理的觸發註冊,然而彼此視窗間,時常會有返回先前視窗的動作,此時很容易會產生事件處理重複註冊的 Bug。


為求理解上的方便,故我們直接設定按下按鈕時,會先釋放舊有的視窗並重新產生原本的新視窗,做出類似視窗間重複返回的動作,如下列程式:

2010年6月29日 星期二

解決 AppServ 內 WinMySQLAdmin 中文亂碼


當輸入中文資料至 MySQL 時,可能會出現資料亂碼的問題,則可採用下列步驟來解決:

2010年6月18日 星期五

使用DTD的方式定義RSS標籤

雖然RSS的所有標籤即便不使用DTD定義,也可讓瀏覽器與RSS閱覽器正常運作,但在使用 DOM Parser 載入檔案時,會讀取到空白符號,若堅持不使用DTD文件認證,則在編輯XML時會十分不便。

2010年5月25日 星期二

Xml 之 DOM 技術:設定 DOM Parser 的注意事項


在設定 DOM Parser時,如果我們要忽略 xml 內的空白字元,大多數的書籍都會使用 setIgnoringElementContentWhitespace 這個 method 來處理。然而使用這個 method 有個最大前提, xml 必須要通過認證方可使用。

2010年4月13日 星期二

java例外處理的注意事項


以下為例外處理的基本程式區塊

try{
...
}catch(Exception1 e){
...
}catch(Exception2 e){
...
}finally{
...
}

例外處理有些規則必須要注意:

2010年4月5日 星期一

this關鍵字用法


this關鍵字可以視為強調物件本身的資料,以下我就以簡單的程式概略介紹:

2010年3月21日 星期日

JAVA(JDK)路徑編譯設定


雖然現在改用Eclipse平台,不過有時還是會想用DOS看看顯示結果為何,但由於編寫的java並不是在JDK的根目錄下,即便在DOS下改變編譯路徑,一旦關閉視窗則要重新設定,在這種種不便的情況下,我在網上找到這個永久改變路徑以方便任何目錄下編譯的方法。