2007年10月23日火曜日

NetBeans IDE 6.0 Beta 2 リリース

NetBeans IDE 6.0 Beta 2がリリースされました
関係各位の皆様、お疲れさまでした
一通りの機能を試せたらと思っています
(モジュール開発ちょっと休止になりますが…)

またもやアイコンです

次にスプラッシュです

みなさん、ぜひお試しください

2007年10月16日火曜日

ロギングについて

NetBeans 6.0の情報、およびNetBeans API Listにもありますが、以前は例外発生時のロギングとして使っていたErrorManagerが非推奨(deprecated)となりました
代わりにJDK のロガーシステムを使用するようになります
実装方法はNetBeans API ListのErrorManagerに詳しくありますが、簡単には下記のようになります
//ErrorManagerを使用した以前の実装
try {
  foo.doSomething();
} catch (IOException e) {
  ErrorManager.getDefault().notify(e);
}
//JDK のロガーシステムを使用した今後の実装
try {
  foo.doSomething();
} catch (IOException e) {
  Logger.getLogger(YourClass.class.getName()).log(Level.CONFIG, "メッセージ", e);
}

すぐに廃止になるわけではありませんが、今後の開発では可能な限り切り替えて使用ください

2007年10月15日月曜日

Progress Barを表示する



プログレスバーを表示する方法です
今回はNetBeans Platform右下部に表示されるプログレスバーについてです
まずはライブラリに「Progress API」を追加して下さい

ProgressHandle handle =
  ProgressHandleFactory.createHandle("Sample Progress Bar");

ProgressHandleFactoryクラスを使い、ProgressHandleクラスを生成します
createHandle()メソッドの第1引数は表示文字列になります
プログレスバーを動作させるには別スレッドの生成が必要になりますので、実際には下記のようになります



RequestProcessor.getDefault().post(new Runnable() {
  public void run() {
    public void run() {
      ProgressHandle handle =
        ProgressHandleFactory.createHandle("Sample Progress Bar");
      try {
        handle.start();
        //以降に実際の処理を記述します
        for(int i = 1; int < 100; i++) {
          Thread.sleep(1000);
        }
      } catch (InterruptedException ex) {
        Exceptions.printStackTrace(ex);
      } finally {
        handle.finish();
      }
    }
  });

RequestProcessorクラスはスレッドを実行するクラスと考えて下さい
今回は特に処理を記述していないので、Threadクラスのsleep()メソッドで一時的にスレッドを停止しています
この処理時間が短いと表示されないように見えますので、その場合は上記のようにsleep()メソッドを使うなどして時間を調整して下さい
また、キャンセル用の「×」ボタンを表示するにはCancellableオブジェクトを引数に割り当てて下さい
実装した箇所のみを抜粋すると以下のようになります

ProgressHandle handle =
  ProgressHandleFactory.createHandle("Sample Progress Bar", public boolean cancel() {
      return true;
});


進捗率を表示することも可能です



方法はProgressHandleクラスのstart()メソッドに総工程数を設定し、次にprogress()メソッドの引数に消化工程数を設定します
上記「×」(キャンセルボタン)と進捗率を表示する実装は下記の通りです

RequestProcessor.getDefault().post(new Runnable() {
  public void run() {
    public void run() {
      ProgressHandle handle =
        ProgressHandleFactory.createHandle("Sample Progress Bar", public boolean cancel() {
      return true;
    }););
      try {
        handle.start();
        //以降に実際の処理を記述します
        Thread.sleep(5000);
      } catch (InterruptedException ex) {
        Exceptions.printStackTrace(ex);
      } finally {
        handle.finish();
      }
    }
  });

上記のようにNetBeansのAPI(Progress API)を追加するだけで簡単にProgress Barが作れます
ぜひお試しください

2007年10月14日日曜日

Library Wrapper Moduleについて(2)

引き続き、Library Wrapper Moduleについてです

先のDigesterですが、ルールの中で自パッケージ内のクラスをルールの中に書いているのにClassNotFoundが発生するということがあります
(DigesterというよりBeanUtilsの部分かと思いますが)
これはNetBeansプラットフォームがClassLoaderを独自に持っていることに起因します
そのため、下記のようにDigester側にClassLoaderを渡してあげる必要があります
Digester digester = new Digester();
digester.setClassLoader(Lookup.getDefault().lookup(ClassLoader.class));

これでClassNotFoundは発生しなくなるかと思います

2007年10月10日水曜日

Library Wrapper Moduleについて(1)



モジュール開発時に外部ライブラリを使うことがあると思います
XMLの設定ファイルを読み込むなんてときにはCommons Digesterを使ったりなどなど…
その際にはLibrary Wrapper Moduleプロジェクトを作成し、モジュールの中に含めます

ライブラリが依存する別ライブラリ(上記Digesterの場合はCommons BeanutilsやCollections、Loggerなど)に関しても別Library Wrapper Moduleとして作成するか、DigesterのLibrary Wrapper Module作成時に一緒にその中に含めるかになります
1つのLibrary Wrapper Moduleに含める場合は問題ないのですが、別々のLibrary Wrapper Moduleとして作成した場合、作成後依存性を持つモジュール(上記例ではDigester Library Wrapper Module)のModule Dependencies項目に依存するLibrary Wrapper Moduleを追加する必要があります(作成するモジュールのModule Dependencies項目に追加しても依存性は解決されません)

モジュール開発時、Library Wrapper Moduleを作成し、importしているが、実行時に"NoClassDefFoundError"が発生する場合は、再度各ライブラリ間の依存関係とModule Dependencies項目を確認してみてください

2007年10月7日日曜日

Projectディレクトリを選択する(JFileChooser)

ちょっとMavenを休んで、Module開発の簡単にメモ

private void ActionPerformed(java.awt.event.ActionEvent evt) {
  // JFileChooserをProject UI APIの
  // ProjrctChooser.projectChooser()メソッドを使用して取得
  JFileChooser chooser = ProjectChooser.projectChooser();
  // システムリンク間の移動を制限
  FileUtil.preventFileChooserSymlinkTraversal(chooser, null);

  // 選択後の処理
  if(JFileChooser.APPROVE_OPTION == chooser.showOpenDialog(this)) {
    File projectLocation =
    FileUtil.normalizeFile(chooser.getSelectedFile());
  }
}

特に説明する必要もないほどのことですが、ProjectChooser.projectChooser()メソッドから取得したJFileChooserは初期表示ディレクトリなどプロジェクト選択のための必要な情報が設定されています
選択前、選択後の処理が入っていないので、実装の際に追加してください

2007年10月3日水曜日

Mac OS XにMaven2をインストール

全然活用できていませんが、Maven2のインストールです

MavenはApache Maven Projectよりダウンロードできます
今回はMaven 2.0.7を使用し、説明したいと思います

ダウンロードしたファイルを解凍後、適当なディレクトリに移動します
$ tar xjvf maven-2.0.7-bin.tar.bz2
$ sudo mv maven-2.0.7 /usr/local

次にPATHを通します
$ vi ~/.bash_profile

追記する内容は下記の通りです
export MAVEN_HOME=/usr/local/maven-2.0.7
export PATH=$MAVEN_HOME/bin:$PATH

変更を反映し、PATHが通っているか確認します
$ source ~/.bash_profile
$ mvn --version
Maven version: 2.0.7
Java version: 1.5.0_07
OS name: "mac os x" version: "10.4.10" arch: "i386"

上記のように表示されれば、インストール完了です
NetBeansとの連携は次回にでも紹介できればと思います