Posts Tagged ‘NetBeans’

deepEquals

土曜日, 2 月 6th, 2010

今日、ネットサーフィン(死語)してて、面白そうな記事を見つけたのでさっそく試してみました。

ネタもとは英語だったので詳しく理解することはできなかった。

コードの切れ端と読めない英語をながめてみました。

私はこれを見てすぐに自信を持って答えることはできませんでした(><)

まぁ・・・永遠の初心者ですからしかたないです。

けど気になるので下記のようなシンプルなコードを書いて実行してみました。

24行目からの if 文の処理結果はよく知られた結果となることは間違いないでしょう。

29行目からの if 文の処理結果が気になります。

1

実行結果だけ確認するのもあれなので、NetBeans を使ってるのだからウォッチポイントを設定してデバッグ実行してみました。

変数 a,b,c,d をウォッチポイントとして違いを確認してみました。

2

変数 c,d は一段階深い所に Object 型の配列の中に Object 型配列の変数が格納され一段階深くなってます。

素人考えでは一段階深くなったところで同じじゃないの?って思ってしまいます。

3

そこで29行目にブレークポイントを仕掛けてステップ実行させてみました。

下のコードの2392行目で引っかかるようですね。

4

念のために実行結果はこうなります。

5

たぶん Java プログラマなら知ってて当然ってことでしょうがこんなこと考えたことがなかったので新鮮でした。

NetBeans の優秀なデバッガをこんなことに使う私って・・・幸せ者だ(^^;

Hatena タグ: ,

JDK 7 の Switch 文を試してみる

火曜日, 2 月 2nd, 2010

JDK 7 で変更のはいる Switch 文を試してみました。

JDK 6 ではエラーとなります。

1

ターゲット JDK を JDK 7 に変更します。

 2

プロジェクトをビルドします。

なにやらビルドエラーが出てますが NetBeans 6.9 の Dev 版を使っているので気にしない(いいのか!

3

プロジェクトを実行します。

ちゃんと String 型で Switch 文の制御ができてますね(^^)

素晴らしい!!

4

Hatena タグ: ,,

Play!

月曜日, 1 月 25th, 2010

CodeZine の記事で Java で動く軽量フレームワーク Play! が紹介されていた。

なにげに見てたら NetBeans プロジェクトとして取り込むことができるとあった。

Play! がどういったものかは CodeZine の記事をご覧いただくとして、記事をもとに NetBeans で動かしてみた。

まず、コマンドプロンプトで Web アプリケーションを作成します。

11

次に NetBeans プロジェクトとして取り込めるようにします。

13

これで NetBeans プロジェクトとして取り込めるはず。 たぶん・・・

では、取り込んでみます。

14

プロジェクト構成は下図のようになってます。

test パッケージがエラーとなってます。

未使用のインポートがあるようです。

何故かは調べてないので解りませんが無視するか、指示にしたがって未使用のインポートを削除でとりあえずエラーはなくなります。

16

プロジェクトが実行できるか確認します。

無事にプログラムが実行されました。

17

ブラウザで確認します。

18

ついでだから記事のとおりプログラムを変更してみました。

いつもの NetBeans での使い勝手の良さがこれでも一緒ですね。

19 20

で、ちょっとだけ触ってみただけなのですが・・・

NetBeans プロジェクトとして取り込んで何が便利なのかな?って考えてみた。

賢いエディタ機能が使える!

これくらいしか思い浮かばない(><)

Hatena タグ: ,

ForkJoin を NetBeans 6.8 で試してみた

月曜日, 12 月 21st, 2009

12月の初旬にリリースされた NetBeans 6.8 を使って JDK 7 に組み入れられる予定の ForkJoin フレームワークを試してみました。

Fork Jion フレームワークの情報は日本語でも少しありましたのでネット上の情報を元に英語の API ドキュメントをちらちら見ながら適当にプログラムを組んでみました。

素人の私がそういう状況で作ったので間違いがあるかもしれないの見つけられた方は優しく解りやすく間違いを正してくれることを望みます。(^^;

まず、JDK 7 build 77 をインストールして NetBeans 6.8 でそれを使えるようにします。(現在は build 78 が最新です)

Java プラットフォームマネージャーにて JDK 7 を登録します。

メニューバーの [ ツール ] から [ Java プラットフォーム ] をクリックして表示される画面の指示に従って入力していきます。

1

プラットフォーム名は自分の好みでつけてかまいません。

2

以上で NetBeans 6.8 でターゲット JDK を JDK 7 build77 にすることが簡単にできます。

新規プロジェクトを作成したらデフォルトがターゲット JDK と異なってる場合はプロジェクトのプロパティで Java プラットフォームを変更できます。

先ほど登録した JDK 7 build 77 が利用可能になってますのでそれを選択します。

3

また、下のほうに「ソース / バイナリ形式」 に JDK 7 が選択可能となりますのでそれを選択します。

4

以上のようにして下図のようなプロジェクト構成のサンプルプログラムを作ってみました。

分割統治型アルゴリズムで有名なマージソートです。

ちなみに JDK 6 ではこのマージソートアルゴリズムが使われているらしいです。

この JDK 7 build 77 からは java.util.Arraysクラスの定義されている基本データ型の配列のソートは、Dual Pivot Quicksortを呼び出すように書き換えられています。

参照型の配列の場合には、TimSortですので、Java 7ではソートのアルゴリズムが新しくなります。

と ForkJoin フレームワークの情報を探していたときにみつけました。(余計な情報><

5

RandomNumber2009.RandomNumber.java 

package RandomNumber2009;

import java.util.Random;

public class RandomNumber {

    private final int[] number = new int[300000];

    public RandomNumber() {
        Random generator = new Random(1982);
        for (int i = 0; i < number.length; i++) {
            number[i] = generator.nextInt(300000);
        }
    }

    public int[] getNumber() {
        return number;
    }
}
 
forkjointest.MergeSort.java

package forkjointest;

import java.util.Arrays;
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.RecursiveAction;

public class MergeSort {

    public int[] sort(int[] number) {
        int nThreads = Runtime.getRuntime().availableProcessors();
        ForkJoinPool pool = new ForkJoinPool(nThreads);
        SortImpl sort = new SortImpl(number);
        pool.invoke(sort);
        return sort.result;
    }

    private class SortImpl extends RecursiveAction {

        private int[] number;
        private int[] result;

        SortImpl(int[] number) {
            this.number = number;
        }

        @Override
        protected void compute() {
            if ((number.length < 5)) {
                result = Arrays.copyOf(number, number.length);
                Arrays.sort(result, 0, result.length);
            } else {
                int midpoint = number.length / 2;
                int[] left = Arrays.copyOfRange(number, 0, midpoint);
                int[] right = Arrays.copyOfRange(number, midpoint, number.length);
                SortImpl task1 = new SortImpl(left);
                SortImpl task2 = new SortImpl(right);
                invokeAll(task1, task2);
                left = task1.result;
                right = task2.result;
                merge(left, right, number);
                result = number;
            }
        }

        private void merge(int[] left, int[] right, int[] number) {
            int i = 0, j = 0;
            while (i < left.length || j < right.length) {
                if (j >= right.length || (i < left.length && left[i] < right[j])) {
                    number[i + j] = left[i];
                    i++;
                } else {
                    number[i + j] = right[j];
                    j++;
                }
            }
        }
    }
}
forkjointest.Main.java

package forkjointest;

import RandomNumber2009.RandomNumber;
import java.util.Arrays;

public class Main {

    public static void main(String[] args) {
        RandomNumber test = new RandomNumber();
        int[] beforeNumber = test.getNumber();
        System.out.println("Before");
        System.out.println(Arrays.toString(beforeNumber));
        MergeSort ms = new MergeSort();
        int[] result = ms.sort(beforeNumber);
        System.out.println("After");
        System.out.println(Arrays.toString(result));
    }
}
このプロジェクトを構築し、実行させると無事に動きました。
さて、ここで本当に並列化しているか確認してみます。
プロファイラを接続して ForkJoinPool のワーカースレッドが起動しているか?
プロファイラによると起動されてますね。
実行中から待機状態になり新たに4っつのワーカースレッドがありますね。
ちなみに CPU コア数は 8個なので8つのワーカースレッドが作成されます。
実行が終了し待機状態になってなんで新たにスレッドが4っつ起動されているのかは謎です。(こういう仕様なのか?)
7 
では、生成されるワーカースレッド数を変更してみます。
        int nThreads = Runtime.getRuntime().availableProcessors();
        nThreads = 1;
        ForkJoinPool pool = new ForkJoinPool(nThreads);
このようにワーカースレッド数を1に変更してみました。
8 
次に 2に変更
9 
4の場合
10 
ちゃんと指定した数のワーカースレッドが生成されるようですね。
ついでにプロファイラの CPU でアプリケーションのパフォーマンスを調べてみようとしたところ
見れなかった(><)
ヒープを大きくしても変わらず・・・ なんでだろう?
12 
JDK 7 に標準搭載予定の ForkJoin フレームワークについての情報はネット上にも少し流れていますので興味のあるかたはググってみてくださいね。
大切なことを忘れてました。
ノーマルのマージソートとのパフォーマンスの比較はまだしていませんので気になる方は比較してみてください。(爆
download-netbeans-125x125 
Hatena タグ: ,
 

ねこび~ん ありがとうございます(^^)

火曜日, 7 月 7th, 2009

NetBeans 6.7 ユーザーテストプログラムの参加賞が今日届きました。

無償で高機能な統合開発環境を提供して頂いてる上に不具合を報告し、改善していただき、おまけに参加賞まで!

私は高度な使用方法を利用することはできないので間違い探しのようなレポートしかできませんでしたが多くの方が参加されていて NetBeans 6.7 はかなり良いできになっていると思います。

常に進化を続ける NetBeans ですからこういったユーザーテストによって高品質な製品になって高い評価を得るのも納得できますね。

また機会があれば是非参加してみたいと思ってます。

ちなみに今日届いた参加賞は GlassFish を持って舌を出してるねこび~んです。とても可愛いですけど GlassFish の運命はいかに・・・

あと、小物とバッグまで頂きましてありがとうございました。

NetBeans 6.7 ユーザーテストプログラムスタッフの皆様方、ご苦労様でした!

NetBeans 最高!

SONY DSC

Hatena タグ:

出力ウィンドウのフォントサイズの変更方法

火曜日, 7 月 7th, 2009

NetBeans 6.7 から出力ウィンドウのフォントサイズが変更できるようになった。

Windows 環境だと文字が小さくて不便だったのが解消された。

このような機能を待ち望んでいたのは私だけではなかった。

この前ポストしたブログでこのことを書いたら私と同じように出力ウィンドウのフォントサイズの変更機能を望んでいらっしゃる方がいた。

変更方法が解らないというメールを頂いたので出力ウィンドウを右クリックで表示されるコンテキストメニュー以外にオプション設定はないか調べてみた。

オプション設定では出力ウィンドウだけの設定は見あたらないようだ。(見落としかもしれません・・・)

1

とりあえずノーマルな出力ウィンドウ

2

フォントを大きくしてみる。

繰り返しただけどんどん大きくなる。

3

この違いは大きい!

4

ここで重大なことに気づく。

確か、開発版ではフォントも変更できたはずなのに変更メニューが無い!\(@o@)/

いつから無くなったんだろう?

[ 追記 ] フォントの変更項目がコンテキストメニューから消えてる件ですがテキストの折り返し機能が有効になっているとそうなるみたいです。

このバグってレポートされていたっけ? まぁ、フォントの変更はそうそうするものじゃないからいいか(^^;

Hatena タグ:

NetBeans IDE 6.7 がリリース!

火曜日, 6 月 30th, 2009

NetBeans IDE 6.7 がリリースされました。

今回も日本語版が世界同時リリースです。

開発スタッフの皆さんに心から感謝します。

6.7 と言う中途半端なナンバーですけど新機能満載です。

Maven , Hudson が正式に採用されてます。

Hudson は川口耕介さんがお遊びで作りだした継続的インテグレーションツールが人気をよんで現在に至っているようです。

一時期は Hudson おじさんがプロジェクトの状況によって表情を変えたりする機能もあったそうです。

私は Hudson 使ったことが一度もないのですが NetBeans に標準搭載されたことですから日本語で利用方法のチュートリアルでも出たら是非試してみたいと思ってます。

あと、オンデマンド機能(エルゴノミクス)もいいですね。

以前、こんな機能いらないとブログに書きましたが訂正です。

NetBeans を [ すべて ] を選んでダウンロードし、インストールして使いたい機能だけ有効化すればいいだけだし、それによって確実にパフォーマンスアップします。

こういった機能はこれからは必須となるのでしょうね。

Windows 7 でも起動スピードを上げるために必要なサービスだけ有効にするような事をしているようです。(詳しいことはわかりませんが)

あと個人的に嬉しいのは出力ウィンドウの文字の大きさを変えることができるようになったことです。

フォントも変更できるようですがまだ試していません。

これは本当に待ち望んでいた機能なので感謝感激です!

それと Windows 7 RC 版にインストールしてみたのですけど JDK6 u14 でやっと動くようになりました。

今までなんでだろう?って悩んでいたのですが Windows 7 のサポートは JDK6 u14 からのようでした。

Java っていうと何処でも(どんなOSでも)動くって思い込んでました。(^^;

これで快適になるだろう新 Windows にアップグレードする障壁はなくなった。

そう、NetBeans が動くことが最大のポイントなんですよ!

a

Hatena タグ:

オプション設定のインポート機能を使ってみる

金曜日, 6 月 19th, 2009

NetBeans 6.7 RC3 をインストールした。

今回初めてオプション設定のインポート機能を使ってみた。

まず RC2 のオプション設定をエクスポートする。

1

エクスポートしたい項目を選択します。

とりあえず「すべて」を選んでみました。

2

ちゃんと zip ファイルで保存されました。(jar ファイルじゃないんですね)

3

これで RC2 にはお暇をやって綺麗さっぱりアンインストールします。

RC3 をインストールしてオプション設定をインポートします。

4 

インポートする項目も選べるんですね。便利!便利!

5

[ 了解 ] ボタンを押してインポートします。

確認ダイアログ画面が出ますので問題なければ [ はい ] ボタンを押したら OK です。

この確認画面の表示がちょっとおかしいですけど画面を大きくリサイズしたらちゃんと読めます。

もう一度小さくリサイズしたら表示が良いときと悪いときがあるようです。

オプション設定のインポートには問題ないようなので気にしない。

追記 この不具合はルックアンドフィールを Nimbus か CDE/Motif に変更した場合に出るようです。

6

 

CDE/Motif

7

このオプション設定のインポート機能って便利ですね。

エクスポートした設定ファイル一つあればすべての環境の NetBeans に同一の設定を簡単にできるってことですね。

Hatena タグ:

First Cup を試してみた

日曜日, 6 月 7th, 2009

Your First Cup: An Introduction to the Java EE Platform Chapter 3 を試してみました。

製品バージョン: NetBeans IDE 6.7 RC2 (Build 200906042131)
Java: 1.6.0_14; Java HotSpot(TM) 64-Bit Server VM 14.0-b16
システム: amd64 上で動作する Windows Vista バージョン 6.0; MS932; ja_JP (nb)
ユーザーディレクトリ: C:\Users\Yucchi\.netbeans\6.7rc2

上記の環境にて GlassFish V3 Preview にてさくさくっとチュートリアルの指示にしたがってあっさりとできてしまいました。

NetBeans 6.7 RC2 で GlassFish V3 Preview を使う方法はこちらにあります。

チュートリアルを進めていくと NetBeans 6.7 ではとりあえず Java EE 6 が試せますよってのが解る。

Java EE 6 対応の GlassFish V3 Preview を選択しても Java EE 6 のバージョンが選べなかったりします。

でも、Java EE 5 で Java EE 6 も対応してます。

細かいところでは GlassFish V3 Preview 側にライブラリがあるので NetBeans が親切に用意してくれるライブラリの中には不要なものがあります。

下図の二つのライブラリも必要ありません。

1

2

最初に JAX-RS RESTful web service を利用した Web アプリケーションを作ります。

作ったプログラムを動かすとデューク君の年齢が表示されます。

3

チュートリアルを進めていくとまた不要なものに出会います。

指示に従い不要なものは削除していきます。

また、Java EE 6 のバージョン仕様に従い各ファイルを編集しなくてはいけないようです。

NetBeans 6.7 がデフォルトで作成する Facelets のバージョンは 1.2 なので faces-config.xml をバージョン 2.0 の仕様に手動で編集しなければなりません。

web.xml ファイルにも必要のないエレメントがあるので編集、削除します。

Facelets Simple File にいたってはほぼ手動編集作業となります。

ちょっと面倒なことをしなければいけないけど Java EE 6 正式版がリリースされれば NetBeans が完全対応してくれるのに期待しましょう。

チュートリアルの指示にしたがってプログラムを完成させれば下図のように動作します。

12 

13

私のようなうっかり者は[ Back ] ボタンを押すとエラーを表示させてしまいます。

14

この原因はこのインポートを誤ったからです。orz

55

このチュートリアルを含んだドキュメントは英語なので詳しい内容はわかりませんが無いよりはいいですね。

久しぶりにサーバーサイドジャバに触れてみたって感じです。

もう、すっかり忘れてしまった(^^;

そう言えば、昔は「サーバーサイドジャバ」とか言って何やらカッコイイと思ったけど今では死語なんだろうか?

Hatena タグ: ,

NB6.7 Dev で Java EE 6

月曜日, 6 月 1st, 2009

JavaOne で何かしらの新技術がお披露目されるだろうと期待している私ですが待ちきれずに NetBeans で Java EE 6 って動くのか調べてみました。

といってもネットでググって調べただけです。

結果は・・・ ありました!

下記サイトです。

http://ekschi.com/technology/2009/05/19/totd-81-getting-started-with-servlet-30-and-ejb-31-in-java-ee-6-using-netbeans-67/

英語が駄目なのでだいたいこんな感じじゃないかと真似てみました。

一部コードは簡略化してありますが問題ないはずだと思います。

NetBeans 6.7 開発版に GlassFish V3 Preview を追加して Java EE 6 を試してみます。

まず GlassFish V3 Preview の zip 版をダウンロードしてインストールします。

NetBeans のサーバーに GlassFish V3 Preview を追加できるように GlassFish v3 Enabler というプラグインをインストールします。

1

インストールが完了したら [ サービス ] ウィンドウでサーバーを追加します。

2

GlassFish v3 が追加可能になってますので画面の指示にしたがって追加します。

3

4

5

GlassFish v3 が追加され利用可能となりました。

6

Java EE 6 の機能の一部ですが早速試してみます。

新規プロジェクトを作成します。

[ Java Web ] カテゴリを選択し、プロジェクトに [ Web アプリケーション ] を選び [ 次へ> ] ボタンをクリックします。

11

プロジェクトの設定を行います。

とりあえずここはデフォルト設定としました。

12

サーバーには GlassFish v3 を設定します。

Java EE バージョンには本当は Java EE 6 を選びたいところですが無いので Java EE 5 をドロップダウンリストから選択します。

13

フレームワークは利用しないので [ 完了 ] ボタンを押して終了します。

14

プロジェクトに POJO ベースの EJB を追加します。

[ 新規 ] → [ Java クラス... ] を選択します。

15

名前と場所を設定します。

16

HelloEJB クラスが自動生成されます。

このクラスに @Stateless アノテーションをつけます。

エラー表示が出てヒントが出ますのでヒントの指示どおり javax.ejb.Stateless をインポートします。

17

sayHello メソッドを作ります。

これで EJB の作成は終わりです。

 

19

次に、この EJB を呼び出すサーブレットを作成します。

[ 新規 ] → [ Java クラス... ] を選択します。

名前と場所の設定を下図のようにします。

22

自動生成された HelloServlet クラスに @WebServlet をつけます。

URL パターンも忘れずにつけます。

23

javax.servlet.annotation.WebServlet をインポートします。

24

HttpServlet を継承します。

26

EJB をインジェクトします。

ヒントのとおりインポートを修正してエラーを修正します。

29

doGet メソッドをオーバーライドします。

32

33

34

下記コードのように doGet メソッドを編集します。

35

これで単純にサーブレットから EJB を呼び出して http://localhost:8080/WebApplication1/hello のアドレスに ” こんにちわ(^^) ゆっち ” と表示されればOKです。

おっと、Java EE 6 では sun-web.xml ファイルと web.xml が不要となるんでしたね。

削除してしまいましょう。

41

なんか寂しい気がするけど気にしない。

42

それではプロジェクトを実行し、http://localhost:8080/WebApplication1/hello にアクセスしてみましょう。

動きましたね(^^)

52

Java EE 6 ってシンプルでいいですね。

アノテーションでなんでもありのようになったような気がしないでもないが大歓迎です(^^)

Hatena タグ: ,