用JDIC在桌面應用程序中集成本機操作系統特性
簡介:本文將介紹 JDesktop Integration Components (JDIC),這是一個 開源的項目,目的是構建消除本機應用程序和 Java 等價物之間差距的組件。 JDIC 單一的 Java API 允許應用程序接進本機操作系統特性,同時保持跨平台 支 持。它目前提供了本機 Web 浏覽器(Internet Explorer 或 Mozilla) 支持、 系統托盤支持、文件擴展集成和其他桌面特性。
開發人員和用戶對 Swing 最大的一個抱怨(也是對 Java 編程語言整體上的 抱怨)是,客戶端應用程序給人的感覺與本機應用程序的不同。(本機應用程序 是指用采用操作系統內置庫的編程語言編寫的應用程序,例如運行在 Windows 上 的 Visual C++ 應用程序。)雖然 Java 應用程序表現得像本機應用程序那樣好 ,但是還是遺漏了某些地方,從而使用戶注意到了差異。基本的問題是 Java 應 用程序不能 真正地表現得像本機應用程序那樣,因為本機應用程序有其不公平 的 一面:它們可以專門針對操作系統進行編寫,這讓它們可以利用特別的本機操作 系統函數。Java 代碼受到自己“隨處運行”的咒語限制,並且調用本機函數( 例 如通過 Java 本機接口)是一個大忌。
直到現在,Java 開發人員一直希望用這個不足換取能夠編寫在任何操作系統 上均可運行的軟件的優勢。但是,隨著 Java SE 5 的發布,特別是 Sun 對增強 Java 桌面的推動,有些開發人員想讓 Java 應用程序和本機應用程序之間的差 異 最終消失。創建 JDIC 就是了為消除這個差異(請參閱 參考資料)。就像 JDIC Web 站點聲稱的那樣,JDIC 的目標是“讓基於 Java 技術的(‘Java 應用程序 ’) 在不犧牲平台獨立性的情況下,成為當前桌面平台的一等公民。”
這本文將介紹 JDIC 項目,以及它如何成功地讓 Java 客戶端應用程序表現 得 更加本機化。通過一系列示例,您可以看到 JDIC 中目前所擁有的組件,以及尚 在“孵化器”中(工作進行中)的一些組件。我們將要介紹 JDIC 所提供的差不 多每個組件,在理想情況下,這些將激發您足夠的興趣,讓您將 JDIC 應用到您 的應用程序中,甚至有助於說服您也為這個項目做點貢獻。
關於 JDIC 的一個重要說明是:它仍然是一個 beta 項目,這意味著它還沒 有 得到任何 JDK 發行版的支持,未來任何時候都可能發生變化。所以一定要把必 要 的文件與基於 JDIC 的應用程序一同提供,因為沒有 Java 虛擬機(JVM)會支 持 它。而且因為 API 有可能在發行版之間變化,所以這篇文章中的函數名稱今後 可 能會有所不同。
它是一個包裝
JDIC 項目有兩個目標:維護 Java API 的跨平台,讓程序可以在任何機器上 運行,並支持人們使用的每個操作系統。因為新功能要求調用每個操作系統的本 機函數,所以這顯然處在一個很艱難的位置上。JDIC 是通過將其 Java API 作 為 所有這些本機調用的包裝器來實現這一點的。JDIC 組件代碼本身指出正在哪個 操 作系統上運行應用程序,並調用適當的 JNI 函數。(您可以看到,在代碼內部 有 針對每個操作系統的 if/else 鏈。這就是跨平台兼容性的代價。)圖 1 演示了 JDIC 包裝本機調用的方式:
圖 1. JDIC 如何包裝本機調用
設置
編寫和運行使用 JDIC 應用程序的機器設置比通常情況略微麻煩一些。除了 通 常的類路徑要求之外,還必須提供 Java 類要調用的操作系統庫。每個操作系統 都有不同的操作系統庫,所以如果想使用 JDIC 將應用程序移植到許多不同的操 作系統上,則必須為每個操作系統提供一個庫。使用 JDIC 發行版 0.9 時(也 就 是這篇文章所根據的版本),JDIC 可以處理 Windows、Linux 和 Solaris 系統 (要對 Macintosh 的擁護者說抱歉了)。
開始下載跨平台 JDIC 包,其中包括:
jdic.jar:這個 JAR 文件包含進行 JDIC 開發所需的所有 Java 類。它們必 須位於類路徑中,以便進行編譯。
jdic.dll 和 tray.dll:在 Windows 安裝中,這些文件都要放在 C:\Windows 目錄(或者對應的目錄)中。這些文件包含 jdic.jar 的 Java 方法和本機操作 系統方法之間的“橋接”方法。
libjdic.so 和 libtray.so:在 Solaris 和 Linux 系統上,這些文件必須 放 在 LD_LIBRARY_PATH 文件夾中。
這些文件設置好之後就可以啟動並運行了。如果不能啟動和運行,那麼請參 閱 JDIC 下載的 README 文件中的文檔,查看特定操作系統的要求。一旦設置就緒 , 並做好了准備,請繼續閱讀以初步了解這些示例。
彌補差距
對於每個 JDIC 組件,我都將演示一個小的示例應用程序,每個組件都解決 Java 語言中目前存在的一個特定差距。
WebBrowser 組件
JDIC 項目中的第一個組件(也是該項目的最初靈感) 是 WebBrowser,它提 供了一條接近操作系統內置浏覽器的途徑。任何熟悉 Swing 的人都非常清楚, 在 Java 應用程序中查看 Web 頁面很困難。例如,現有的 Swing 組件 JEditorPane 就做得很糟糕,只能顯示最簡單的 Web 頁面。如果包含任何 DHTML 腳本,那麼 請忘記它 —— 現有的 Swing 組件不能顯示它。這讓 Swing 開發人員失去了在 應用程序中顯示 HTML 頁面的選擇 —— 由於 Web 在任何桌面應用程序中都是 如 此之重要(用作幫助頁面和 README 文件),所以這是一個很大的障礙。
特別打擊 Swing 開發人員的一個事實是:現在每台機器上都有功能齊全的浏 覽器,但它們的應用程序仍然無法使用。每個本機應用程序都能使用內置的浏覽 器(Windows 上的 Internet Explorer 或 Linux 機器上的 Mozilla)。Swing 的功能與易於訪問的解決方案之間的巨大差距促使 WebBrowser 成為 JDIC 項目 的一個好起點。
WebBrowser 允許 Swing 應用程序將本機浏覽器嵌入任何應用程序中。但是 需 要重點指出的是,WebBrowser 僅僅 是 Web 浏覽器應用程序的呈現部分。這個 組 件不包含 Back 按鈕、地址欄、狀態欄,或者任何不屬於應用程序呈現部分的內 容。但是,正如稍後將看到的,WebBrowser 包含了允許您實現這些常用的浏覽 器 特性的方法。
WebBrowser 組件繼承自 java.awt.Canvas class,這意味著它是一個 Abstract Windowing Toolkit (AWT) 組件。這可能讓熟悉 AWT 和 Swing 組 件 混合問題(包括重繪問題)的 Swing 開發人員開始擔心。WebBrowser 組件覆蓋 了 java.awt.Canvas.paint() 方法,直接把 HTML 呈現給 Canvas 本身,確保 了 性能的優化。但這對 Swing 開發人員意味著什麼呢?這意味著必須把 WebBrowser 包含在 JPanel 中,才能在 Swing 中使用它。這並不像聽起來那麼 壞。JPanel 是包含 WebBrowser 的邏輯組件,其他 Swing 組件已經有內置的 HTML 支持了。
但是,在可以看到可視組件實際工作的同時,為什麼還要一直談論它們呢? 以 下將要運行的示例是隨 JDIC 下載一起提供的,它與本文其余示例重新打包在一 起,可以在一個下載中得到它們(請參閱 下載)。要查看 WebBrowser 示例的 實 際工作,請運行 demo.Browser.Browser 主類。圖 2 顯示了 WebBrowser 示例 的 實際工作:
圖 2. WebBrowser 實際工作
現在應該已經看到了 WebBrowser 的實際工作,讓我們再來看一些 WebBrowser 類中的方法,它們可以讓您創建完整功能的浏覽器:
每個浏覽器都期望的 4 個函數:
back()
forward()
refresh()
stop()
允許應用程序改變 URL 的方法:
getURL()
setURL()
允許應用程序直接傳遞 HTML 的方法:
getContent()
setContent()
允許應用程序偵聽 WebBrowserEvent 的方法,我將在這一節後面部分進行解 釋:
addWebBrowserListener()
removeWebBrowserListener()
最新的方法:
executeScript()
executeScript() 方法允許程序執行 JavaScript 腳本,並在裝入的 Web 頁 面上或 HTML 內容上執行腳本。這個函數很酷,因為可以用它改變 Web 站點的 外 觀,甚至是改變第三方站點的外觀:請試著把下面一行添加到演示應用程序中, 放在頁面輸入的後面:
webBrowser.executeScript("document.bgColor='blue';");
這為每個裝入的 Web 站點提供了藍色背景,並覆蓋了站點的默認背景色。
WebBrowserEvent/WebBrowserListener 框架工作的方式與 Swing 中的每個 事 件/偵聽框架是一樣的,但在該例中,涉及 WebBrowser 能夠觸發的所有與 WebBrowser 有關的操作。對 WebBrowser 觸發的事件感興趣的類,應當通過 WebBrowser 的 addWebBrowserListener() 方法,把自己添加成它的偵聽器。
WebBrowserListener 接口中必須實現的方法是:
documentCompleted():在文檔加載完成時調用。
downloadComputed():在下載操作完成、中斷或失敗時調用。
downloadError():在下載操作過程中發生錯誤時調用。
downloadProgress():在下載操作過程被更新時調用。
downloadStarted():在下載操作開始時調用。
statusTextChange():在狀態欄文字發生變化時調用。
titleChange():在文檔標題發生變化時調用。
簡而言之,這就是 WebBrowser 組件。WebBrowser 類和 WebBrowser 事件/ 偵 聽器框架中的所有方法都允許您創建完整的、實用的 Web 浏覽器應用程序。它 可 能無法與 Internet Explorer 或 Firefox 相比,但是 Swing 開發人員從此不 再 受到該庫對 Web 頁面和 HTML 可憐支持的制約,可以在任何應用程序中放心地 依 賴於完整 Web 支持 —— 即使顯示最困難的 Web 站點也可以。作為 JDIC 項目 的靈感來源,WebBrowser 在正確的方向上開始發揮其作用。
SystemTray 組件
SystemTray 組件是最近才添加到 JDIC 中的。它允許 Java 應用程序把圖標 放系統托盤上(在 Windows 中,是屏幕右下角包含音量圖標這類圖標的區域) 。 Windows 應用程序中一個不斷增長的趨勢就是把功能添加到系統托盤圖標上。即 時通信應用程序就是一個很好的例子。它們常常只通過系統托盤圖標向用戶提供 許多可以訪問的選項(例如關閉應用程序)。迄今為止,Java 應用程序還不能 融 入到這個潮流中。
像 JDIC 中的多數項目一樣,這個組件的 API 簡單易用。實際上,整個 org.jdesktop.jdic.tray 包只有兩個類:SystemTray 抽象了系統托盤本身; TrayIcon 抽象了系統托盤中的單個圖標。
請運行示例應用程序 —— demo.jdic.TrayDemoFrame 類 —— 觀察應用程 序 如何使用 JDIC 的系統托盤特性(請參閱 下載)。在運行應用程序時,應當在 Windows 的系統托盤上看到 yin-yang 圖標,就像圖 3 中左上角那樣。(在 Linux 和 Solaris 上,它的外觀當然會有所不同。即使在 Windows 上,也不完 全與圖 3 中的相同,因為不可能得到系統托盤的菜單快照,所以這是一個重新 制 作的圖片。)
圖 3. 運作中的 SystemTray
這個示例中有趣的部分不是 JFrame 本向,而是它如何處理與系統托盤的交 互 。請看一下示例應用程序中設置這部分的代碼。第一步是得到機器的系統托盤的 實例:
SystemTray tray = SystemTray.getDefaultSystemTray();
接下來幾步是創建托盤圖標:
final TrayIcon trayIcon = new TrayIcon(getTrayIcon(), "Tray Demo", getPopupMenu());
trayIcon.setIconAutoSize (true);
trayIcon.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
setVisible (true);
}
});
TrayIcon 類(很不幸)目前對它與鼠標單擊的交互方式進行了硬編碼。 (JDIC 用戶正在呼吁修改這一點。) TrayIcon 在鼠標左鍵單擊時將觸發 ActionEvent,而在鼠標右擊時則顯示彈出菜單。
最後,向系統托盤添加新的 TrayIcon:
tray.addTrayIcon(trayIcon);
這就可以了 —— 已經創建了一個漂亮的系統托盤圖標,可以給 Java 應用 程 序提供一種非常本機的感覺了。
JDIC 項目最近向 TrayIcon 類添加了一個 displayMessage() 函數。它允許 TrayIcon 顯示 Windows 用戶熟悉的“泡泡消息”。單擊示例應用程序的 Alert 按鈕,就可以看到實際運用中的泡泡消息。以下是實現它的代碼:
getBtnAlert().addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
trayIcon.displayMessage("Alert", "This is an Alert Message", TrayIcon.INFO_MESSAGE_TYPE);
}
});
本機文件支持
目前,Java 應用程序無法使用打開文件的默認應用程序。例如,Java 應用 程 序不能在 Microsoft Word 中打開 .doc。它不知道每台機器上 Word 的路徑, 所 以,也就無法知道 Microsoft Word 是不是處理 .doc 文件的首選應用程序。而 且也沒有可以從 Java 應用程序打印 .doc 文件的簡便方法。
JDIC 的 Desktop 類創建了一些簡單的靜態方法,允許 Java 應用程序與系 統 應用程序交互,從而解決了這些問題。系統應用程序構建到操作系統之中 —— 只有操作系統才知道哪個應用程序應該打開 .doc 文件。
這個組件不像 SystemTray 組件那麼有用,但是確實彌補了一些空白。如果 要 處理不同的文件類型,例如文件浏覽器,那麼任何 Java 應用程序都可以使用 Desktop 類的方法:
Desktop.browse(URL url):在系統浏覽器中打開 Web 站點。
Desktop.edit(File f):使用與文件類型的 edit 命令相關的程序打開文件 。
Desktop.open(File f):使用與文件類型的 open c命令相關的程序打開文件 。
Desktop.print(File f):打印文件。
Desktop.mail(Message m):自動打開系統首選的電子郵件程序,並填寫好一 些字段。
可以在示例程序 demo.jdic.FileExtensionDemo 中看到這些函數的實際作用 。應用程序頂部允許浏覽查找文件,然後打開文件,如圖 4 所示:
圖 4. 本機文件支持
在單擊 Open 按鈕時,Desktop 類將調用系統默認的 PDF 閱讀器,就像在下 面的代碼中可以看到的那樣:
else if (e.getSource() == getOpenButton())
{
try
{
Desktop.open(new File(getTxtFile().getText()));
}
catch (DesktopException ex)
{
ex.printStackTrace ();
}
}
FileTypes 組件
目前 JDIC 項目的最後一部分是 FileTypes。這個組件第一眼看起來可能不 太 重要,但是在我描述它之後,您就會看出它是創建整體 Java 桌面應用程序的非 常重要的一個組成部分。FileType 解決的基本問題是:現有 Java 程序不能登 記 文件擴展名並把它們與應用程序關聯。在雙擊擴展名為 .doc 的文件時, Windows 會自然而然地知道要在 Word 中打開這個文件。Java 應用程序無法做到這點。 無 法編寫這樣的 Java 應用程序,讓它在雙擊具有新擴展名的文件時自動打開。也 不能登記像“jexx”這樣的擴展名打開自己的 Java 應用程序。這對 Java 應用 程序開發人員來說是一個嚴重的倒退,因為這讓會他們的應用程序感覺起來不像 本機操作系統的一部分 —— 在用戶雙擊文件時,是希望他們不得不導航到 Open with... 對話框,還是希望他們打開應用程序呢?
org.jdesktop.jdic.filetypes 包中的三個類彌補了這個差距,它們允許 Java 應用程序登記文件擴展名,並把它們與 open、edit 和 print 動作關聯。 可以選擇讓不同的應用程序進行打開和編輯。例如,應用程序可以用浏覽器打開 XML 文件,並用文本編輯器編輯它。把動作連接到關聯之後,就可以把它登記到 操作系統上。
現在開始研究 demo.jdic.FileExtensionDemo 類 (與前一節討論的 本機文 件支持 是同一個應用程序)。 這次,將使用對話框的下半部分創建自己的 FileType。圖 5 顯示了在填充了字段之後該示例看起來的樣子:
圖 5. FileTypes 演示
在單擊 Register 按鈕之後,可以在 Windows 文件夾選項對話框中打開 File Types 選項卡,查看剛才創建的內容,如圖 6 所示:
圖 6. 關聯登記
現在看一看示例應用程序中相關部分的代碼:
else if (e.getSource() == getRegisterButton())
{
String verb = getTxtVerb().getText();
String command = getTxtCommand ().getText();
String fileExt = getTxtExt().getText();
// Create the Action object that will store the
// verb (in this example "open" with the command "in this case the
// link to the java.exe
Action action = new Action(verb, command);
// Next we need to create the Association which we'll use to
// register in the operating system
// You can link the action we just created to the
// association and a corresponding file extension.
Association association = new Association();
association.addAction(action);
association.addFileExtension (fileExt);
// Finally, after we have created our Association, we use the
// AssociationService, which will talk directly to the operating system to
// register the file type
AssociationService associationService = new AssociationService();
try
{
associationService.registerSystemAssociation (association);
}
catch (RegisterFailedException ex)
{
ex.printStackTrace();
}
catch (AssociationAlreadyRegisteredException ex)
{
ex.printStackTrace();
}
}
這個示例介紹了在操作系統中創建和登記文件類型有多簡單,Association 類 中一些有趣的附加方法可以增強文件類型:
setIconFileName():讓應用程序設置文件類型的圖標。
setMimeType():讓應用程序設置文件類型的 Mime 類型。
作為最後一步,為了顯示本機文件支持和 FileTypes一起發揮作用的威力, 請在桌面上創建叫做 example.jexx 的文件,如圖 7 所示:
圖 7. 桌面文件
現在,不需雙擊 example.jexx 文件(它什麼也證明不了),請使用在 本機 文件支持中剛剛學到的 JDIC 代碼,通過 FileExtensionDemo應用程序打開它。
圖 8. FileType 和本機文件支持演示
在單擊 Open按鈕時,會看到這個文件啟動了 Notepad。本機文件支持和 FileType組件的結合是 Java 應用程序開發人員工具箱中的一個重要新增功能。 對 Java 應用程序的可執行 JAR 文件實現本機支持雙擊的日子到來了。現在用 戶終於可以通過雙擊應用程序關聯的文件來打開 Java 應用程序了。這一個小小 的但是獨特的新增特性讓 Java 應用程序看起來就像是操作系統天生的一部分一 樣。
孵化器中
迄今為止我描述的組件都已經很完善,並成為 JDIC 項目的有用部分。JDIC 還包含一組建設中的項目,叫做 孵化器項目(也叫做沙箱)。在孵化器項目中 可以發現許多完成程度,從已經完成的組件一直到等候進入 JDIC 包的條目,以 及仍然是紙上設想的組件。
作為公開項目(公開想做貢獻的任何人的想法和努力成果)的一個組成部分 ,孵化器提供了一個促使新想法產生的測試機會。只有測試過而且 API 和功能 得到批准的組件才會升級到最後發布的 JDIC 包。在閱讀這一節的孵化器組件時 ,要記住的一點是 —— 它們很酷,但是不完整。距離它們准備好登場可能還有 幾個月的時間。
IconService
IconService類執行單一的任務:把圖標名稱(通常采用難以理解的形式,例 如 C:\Program Files\IBM\eclipse.exe,1) 轉換成 java.awt.Image對象。一 旦獲得了 Image對象,就可以對其進行操作,所以可以操縱圖標本身。圖標名稱 是通過調用 getIconFileName()方法從另一個 JDIC 類得到的,這個類就是 Association類。下面是把圖標轉換成 Image對象的方法:
Image i = IconService.getIcon(Association.getIconFileName(), 1);
SystemInfo
SystemInfo類試圖提供操作系統本身的信息。這包含諸如系統空閒時間、用 戶會話是否鎖定之類的項目。在編寫這篇文章時,它提供的內容只有這些,沒有 用來浏覽或閱讀這些方法的 API。這個類好像仍然還處在嬰兒期,所以請耐心等 待,看看是否會有更新。
FloatingDock
FloatingDock類的目標是模擬 Windows 的任務欄,它既允許在上面添加組件 ,也允許把自己停靠在屏幕的某個區域上。FloatingDock基本上是個綁定到某個 區域(左、右、下、上)的 JPanel。它包含的功能大部分與 JPanel相同,並且 允許改變布局,添加和刪除組件。FloatingDock還允許應用程序在任何時候改變 區域,非常像把 Windows 的任務欄拖到屏幕上的新位置。
不要被誤導,以為 FloatingDock提供了與任務欄一樣的功能。它只是支持停 靠到某個屏幕區域。如果想模擬任務欄、添加顯示 JToggleButton的功能、改變 它們的大小等,那麼這些將完全取決於您自己。
下面展示了如何在屏幕底部創建 FloatingDock對象並向它添加 JButton:
FloatingDock dock = new FloatingDock();
dock.setLocation(FloatingDock.BOTTOM);
dock.add(new JButton("Window 1"));
Misc 包
Misc孵化器包包含一個挑選出來的單任務組件集合。這些組件只包含一個或 兩個靜態方法,試圖彌補 Java 到本機轉換的某個簡單差距。在編寫這篇文章時 ,這個包中的類只支持 Macintosh,因為開發人員感到在這個項目中 Mac 沒有 得到應得的重視。目前,還沒有部署任何東西,因為項目還沒有為 Mac 完成一 個構建。所以目前來說,最多只能閱讀它們的方法和它們能做什麼,然後,期望 在不遠的將來會發布一個發行版。
Volume
Misc包的成員之一 Volume類控制著計算機的音量。public float Volume.getInstance().getVolume()得到當前音量,public void Volume.getInstance().setVolume(float vol)設置音量。
這個類還允許用戶記錄音量上的變化,它提供了一個 addPropertyChangeListener()函數,在計算機的音量發生變化時,該函數會通 知對此感興趣的類 (但是不一定要通過 Volume類本身)。
Wallpaper
Misc包的另一個成員 Wallpaper類及其對應的 WallpaperFactory類允許 Java 應用程序改變操作系統的牆紙(桌面上顯示在背景中的圖片)。以下是改 變牆紙的一些示例代碼:
Wallpaper wall = WallpaperFactory.createWallpaper();
wall.setBackground(new File("/background.jpg"), Wallpaper.CENTER);
Alerter
Misc包的另一個成員 Alerter類添補了一個很小的空白,它讓不在焦點的應 用程序(例如,在其他窗口後面)通知用戶需要執行某些動作。在 Macs 上(也 是目前支持這個類的地方),這個 Alert 會“彈回”停靠圖標。在 Windows 上 ,在得到支持的時候,會閃動任務欄圖標,直到該圖標被選中。以下是一個代碼 示例:
Alerter.newInstance().alert();
DockMenu
Misc包中的最後一個類解決了停靠菜單(Dock Menu),這個組件只在 Macs 中存在,在 Windows 或 Linux 系統中沒有對應的組件。DockMenu類允許用戶把 菜單附著到 Mac 應用程序的 Dock Menu 中。以下是如何使用 DockMenu類的一 個示例:
JMenu menu = new JMenu("Exit");
DockMenu.newInstance().setMenu(menu);
FileUtil
JDIC 孵化器的最新添加是 FileUtil,這個類提供了一些新功能,補充了 JDK 中的 java.io.File類。public java.math.BigInteger getFreeSpace(File dir)方法返回目錄中的剩余空間,public boolean recycle(File f)把文件放在 操作系統的回收站,而不是刪除它。
期望列表
JDIC 和孵化器中的組件列表相當詳盡,但是決不意味著彌補了 Java 應用程 序和本機應用程序之間的所有差距。這一節是我和其他許多開發人員都想看到的 JDIC 中已實現的組件的期望列表。對於那些有想法的讀者來說,需要記住的是 ,JDIC 是一個開源項目,任何人在任何時候都可以對其做貢獻 —— 所以請放 心地把這些想法付諸於行動吧。
本機支持的非矩形窗口
非矩形幀在應用程序中變得非常流行(例如,Microsoft 媒體播放器)。對 跨多操作系統非矩形窗口的支持,Swing 開發人員對此已經呼吁了好多年。如果 開發人員在 JDIC 中添加了對它的支持,那麼整個 Swing 社區就會立即把它們 捧上天。(現有解決方案中的方法包括來自 L2FProd.com 項目的只能用於 Windowsr 解決方案和我自己的 IFrame,這是一個“接近完成”的解決方案,請 參閱 參考資料。)
桌面的“New”支持
當用戶在 Winows 桌面上右擊時,他們會看到 New菜單選項,裡面包含的子 菜單中有用戶可以創建的常見文件類型。目前 Java 語言還不能訪問這個菜單。
特定文件的右擊支持
用戶在 Winows 中的文件上右擊時,會呈現對這個文件的選擇。有些應用程 序會隨時自動地改變它們在這個選擇列表中的默認行為。(例如,請注意 WinZip,如果已經在機器上安裝該軟件的話,那麼在右擊任何文件類型時,它會 始終是其中的一個選擇。Java 語言無法永久地向這個菜單添加程序或選擇。
SystemInfo 類中的附加功能
SystemInfo類中的附加功能可能很有用,其中包括支持查找進程名稱和編號 、網絡狀態、網絡連接速度和電池使用壽命。
用戶和組管理
如果 Java 應用程序能夠管理操作系統的用戶和訪問組,包括處理口令管理 ,那會很棒。
時間和日期
如果讓 Java 程序可以改變操作系統的時間、日歷和時區,那會怎麼樣?
結束語
一般來說,JDIC 項目彌補了在 Swing 和 Java 程序語言之間的主要差距。 隨著其他方面的不斷努力,差距會進一步縮小,總有一天,用戶會無法區分 Java 應用程序和本機應用程序。
已經看到,JDIC (在編寫這篇文章時)既包含成熟的、為生產作好准備的項 目,又包含孵化器項目(包含不同開發階段的項目)。孵化器提供了一些有趣的 項目,不久的將來,這些項目可能會走向成熟。重要的是要記住:如果決定冒險 在應用程序中包含孵化器項目,由於孵化器隨時可能會改變,可能會帶來一些問 題,甚至可能使應用程序根本不工作。
我的建議是,如果喜歡在本文中看到的內容,那就最好加入 JDIC 項目。這 個項目對所有有興趣參與的人都是開放的,而且就像多數開源項目一樣,它能做 到的取決於人們想要貢獻的(請參閱 參考資料,以獲得登錄您打算參與的項目 所在站點的直接鏈接)。不管是想要幫助完成孵化器中的某個項目,還是決定跟 蹤我的期望列表中的某個想法,或是想看到自己的想法走向成熟,開發社區都會 極大地感謝您的幫助。不要認為自己必須是一名本機代碼或 JNI 專家,或者必 須知道每個操作系統。孵化器項目會讓您推敲您的想法,並讓您從其他志願者那 裡得到反饋和幫助。
本文配套源碼