顯示具有 java 標籤的文章。 顯示所有文章
顯示具有 java 標籤的文章。 顯示所有文章

2011年8月11日 星期四

Java NIO 的教材

工作需要我必須學習 Java NIO。在網路上找到了以下兩個連結:

2010年2月2日 星期二

Swing vs. SWT (II)

接續之前的文章,SWT有以下的優缺點:

SWT 的優點:
  1. 和底下平台一致的風格(Look and Feel)。
  2. 和 Eclipse 的整合。
  3. 雖然同樣不是 thread-save。但誤用時會發出異警,在這點上容易除錯。 
SWT 的缺點:
  1. 不內建於 JRE 中,因此必須下載特別的函式庫才能執行。
  2. 因為使用底下作業系統提供的元件,無法以 java 的 Garbage collector 管理,必須自行管理元件的記憶體,因此容易有 Memory leak。當元件之間的關係是靜態時,只要釋放最上層的元件的記憶體就好,問題會輕些。如果元件之間的關係是動態的,就比較會有 Memory leak了。
  3. 不容易製作客製化元件,因為要客製化時常必須瞭解底層作業系統的 API。
有關 SWT 的迷思:
  1. 在比較 SWT 和 Swing 時,常誤以為 Swing 的功能比 SWT 強大。但是真正該比較的常是 SWT+JFace 和 Swing,甚至是 Eclipse 對 Netbeans。

    Swing vs. SWT (I)

    最近基於工作需要閱讀有關 Swing 和 SWT 的比較。以下是我的心得。

    Swing 的優點:
    1. 內建於 Java JRE 中,只要有 java JRE 就能執行。不必另行下載函式庫。跨平台特性勝過 SWT。
    2. 能以 Garbage Collector 管理元件,因此減少了 Memory leak 的風險。
    3. 容易對元件客製化,不必瞭解底層作業系統提供的元件。這些客製化的元件馬上具有跨平台的特性。
    4. 可以做出完全不同於底層作業系統風格(Look and Feel)的 GUI。
    Swing 的缺點:
    1. 建造 Swing 元件的程式都必須在 Event-dispatching thread 或是 Worker thread 中執行,而且必須選對 thread,否則會有 GUI 反應太慢、或是顯示出狀況的情形。當沒有使用 thread 或是該用 worker thread 時沒使用 worker thread 的情形下,程式不會發出任何警告,這類的錯誤很難診斷。目前有些輔助的工具,但尚未和 IDE 整合。
    2. 主要的 IDE 是 Netbeans。Netbeans 多用於個人私下的開發案。大多數的企業使用 Eclipse,因此選擇 SWT。
    3. 如果想使用 Eclipse RCP。就不適何用 Swing。
    4. 因為 Oracle 併購了 Sun,使得許多人對 Netbeans 的前途感到疑慮。連帶也對 Swing 感到疑慮。
    5. 因為 Sun 在過去幾年力推 JavaFX,使得許多人對 Swing 的前途感到疑慮。
    有關 Swing 的迷思:
    1. Swing 的速度比 SWT 慢:在 SWT 當推出時猛烈攻擊 Swing 速度慢的弱點。但這幾年 Swing 的速度已經追上,除非該用 Worker thread 的地方未使用 worker thread,否則速度已經沒有明顯的差距。
    2. Swing 不支援底層作業系統的風格(Look and Feel):這也是當年 SWT 攻擊的重點。但是如今 Swing 可以支援各種風格,包括底層作業系統的風格。

      2009年10月31日 星期六

      rhino-debugger

      目前我的網路遊戲是以 plt-scheme 寫成,有以下兩個原因使得 plt-scheme 難以被取代:
      1. 它的 at-exp 容易讓我描述遊戲的劇本。
      2. 它的 continuation based web server 使得我容易撰寫遊戲的流程。
      但未來遊戲若要做成 GUI 的形式,我會期待用 javascript 完成。此時,我會選擇以下的工具:
      1. rhino, 以 JAVA 實現的 javascript interpreter。
      2. JAVA 的 Swing。因為它的無所不在,因為 Java Web Start。我不選擇 Eclipse 的 SWT,並不是有 JAVA 的地方就有 SWT。
       為未來做準備,我因此必須多瞭解一點 rhino,以及 JAVA。以下是我今日拜訪的連結:
      Rhino + Javascript + Swing, Look Ma no Java ,很好,這樣短短的一篇,就給了我一個好開頭。

      依據這篇文章,我寫了以下小小的 GUI 程式於 launch.js 中,以 rhino launch.js 成功地執行。

      importPackage(Packages.javax.swing);
      importPackage(Packages.javax.swing.border);
      importPackage(Packages.java.awt.event);
      importPackage(Packages.java.awt);
      importPackage(Packages.java.util);

      importClass(Packages.java.beans.EventHandler);

      function runApp() {
              var lframe = new JFrame("MapaView");
              lframe.setSize(500, 400);
              lframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
              var panel = new JPanel();
              panel.border = BorderFactory.createEmptyBorder(30, 30, 10, 30);
              panel.setLayout(new java.awt.GridLayout(0, 2, 10, 10));
              var exitButton = new JButton("Done");
              exitButton.addActionListener( function() {
                      java.lang.System.exit(0);
              });

              panel.add(new JLabel("done yet?"));
              panel.add(exitButton);

              lframe.add(panel);
              lframe.pack();
              lframe.show();

      }
      runApp();

      此外,我也瞭解了一下 rhino-debugger。rhino-debugger 這命令在 Debian Linux 下是一個 script 檔。閱讀後多多少少讓我知道要如何呼叫 Java。呼叫 Java?唉,是啊,我完全不懂 Java,我不屬於新生代的軟體工程師了。