2009年4月28日火曜日

Hello World!

誰も書かない本当の基本から。これ以上はないと思います。ま、生徒は自分ですから。まずはHello World!です。が、ただ標準出力に出力するだけです。

1. netbeans で『新規プロジェクト作成』でJavaFXのプロジェクトを作成します。完全にデフォルトでOK。何も変更しなくてよろしい。なので特に何が出来るという説明や図解は不要だと思いますが、後々バージョンが変わって、内容が変更された場合にそなえて、一応載せておきます。

名前がJavaFXApplication5となっていますが、デフォルトで5回新規作成したためです。本当に最初に作成した場合は名前がJavaFXApplication1になります。

2. Main.fxの中身を全部削除します。ええ、きれいさっぱり。ファイルを削除するんじゃなく、あくまで中のコードを削除です。

3.そうしたら、ただ一行、println("Hello World!")と書きます。末尾のセミコロンも要りません。で、再生ボタンみたいな実行ボタンを押すと、出力部分にHello World!と表示されるはずなのですが...アリ? なんか微妙に文字が、、あ~おかしい。これはブログに書く前にやった"!"(びっくりマーク)が付いてないバージョンじゃないか。どうする?

それじゃあ、と適当に金槌に刷毛がくっついたアイコンをクリックしてみると、構築成功、と出力されたので、これがきっとクリーンかリビルドみたいなボタンなのでしょう。さあ気を取り直して実行すると・・・ものすごいエラーです。

どうやら、ソースコードの右側に電球マークが出ているのを無視してはいけなかったようです。


電球をクリックすると、

Change package to "javafxapplication5"
Move to correspondent folder

の二行が表示されます。

ここでMove to correspondent folderを選ぶと、プロジェクトツリーの下のソースパッケージというノードの下に<デフォルトパッケージ>というノードが追加され、そこにMain.fxが移動されます。しかしこれでは何も問題が解決しません。

一方、"Change package to "javafxapplication5"を選択すると、Main.fxの先頭行に package "javafxapplication5"という一行が挿入されます。つまりMain.fxは、

package javafxapplication5;
println("Hello World!")

の2行になります。こうして再生ボタンを押すと無事出力に更新されたHello World!が表示されました。

デフォルトで生成されるMain.fxのコードをそのまま使えば、ウィンドウに文字列が表示されます。そこを書き換えてHello World!にするのもアリなのですが、printlnって何?っていう説明が見当たらない。といっても標準出力に文字を出力しますよ、ってことじゃなしに、Stage:と来るようなオブジェクト指向言語が、まるでC言語のmain()で始まってprintf("Hello World!")って何よっていう。自分としては、基本的な仕様として、Stageというウィンドウのインスタンスを作る以前に、JavaFXの構成要素が何で、ソースファイルにはどんな種類があって、それぞれのソースファイルの中の記述順序はどうなっていて、どこから実行が始まるのか、といった超基本的なところから、厳密な(エラーのない)プロジェクトファイル(ソース)一式と対で欲しいのです。

そういう観点で、自分が抱いた疑問、そして解決に至った経緯をロギングしていこうかなと。で、最終的にプロジェクトファイルを積み上げていくようなチュートリアルが書けるようになりたいと思います。少なくともどんなに小さいことでも、常にプロジェクト(netbeansのようなIDEに拠らないということであればファイル構成)と対になった形で残したい。

櫻庭さんの記事を飛ばして読むと、『クラスを作る』のところで、クラス名とファイル名を合わせるという話の中で、この辺はJavaと同じ、という説明があります。しかし私はJavaを使ったことがないから、そんなことも知らないわけです。厳密には本とかを斜め読みしたり、サンプルを改造してみたりといった程度で触ったことはあります。でも基本的には難しくないので、逆にちゃんとした厳密な理解が出来ていない。大体の内容を理解するには良かったのですが、ご覧の通り、たった1行のプログラムを書くにも事欠く始末です。

Sunのサイトに素晴らしい入門用のチュートリアルがあるのですが、これが本当に有難くて、ちゃんとrunから実行が開始される話や、(runが)省略されたら引数なしのrunが自動生成される話なども書かれているのですが、先に進んでいくと、AddressとCustomerという2つのクラスが出てくるパートで、エラーになってしまい、先に進めなくなってしまいました。チュートリアルにはAddress.fxとCustomer.fxを同じディレクトリに置けばよいとしか書いていないと思うのですが・・・。でも1つのファイル、例えばCustomer.fxにAddress.fxの内容をコピーすれば通る(エラーじゃなくなる)のです。コピペしているし、書き間違いは見当たらない。ファイル名もクラス名をコピペしているので、同じはずです。もちろん目視でも何度も確認しました。昨日の深夜3:00までやって、とりあえず諦めました。でもこのエントリを書いたことで、ひょっとしてpackageを追加して刷毛をクリックすれば通るのでは?という予感もしていますが、さてどうでしょうか。あとでやってみます。---> やってみました。ぜんぜん違いました。結論からいうとAddressクラスの各変数にpublicもしくはprotectedが付いてなかったからです。もうすっかり忘れてました。もちろんチュートリアルがファイルを別にしていてるのは問題だと思いますが、2年前ならすぐ気づいていたでしょうね・・・残念。

あと他にも何度刷毛アイコンをクリックしてもXMLファイルを示すエラーが消えなくて悩んでいたのですが、どうにも分からなくて、強引に実行ボタンをクリックすると、3つのファイルのどれがmainか?みたいな問い合わせダイアログが出てきて、それでMainとなるファイル(このとき名前はtestになってました。このHello World!とは別なプロジェクトなので)を指定したら、何事もなかったかのように通ってしまいました。そーゆーことぉ・・・ふう。

このHello World!の出力とは、オブジェクト指向といいつつ、いきなりprintlnみたいな関数がハダカで使える意義って何っていう、この痛々しい気持ちの出力なのです。

2009年4月24日金曜日

JavaFX AppStore

App Storeって別にiPhoneの専売特許じゃないと思うんですよ。例えばパソコンソフトを例に挙げると、ベクターとか窓の杜といった老舗のオンラインアプリケーションストアやオープンソースだとOpenForgeのようなダウンロード(だけじゃないけど)サイトがある。でもiPhoneのAppStoreってもっとiPhoneのUIみたいに割り切りがいい。iTunesにしても音楽やビデオだけじゃなく、MacOS用のアプリが配信されてもいいと思うんですよね。ちょっと違いますけど、レンタルサービスのクライアントという新しい使われ方もされてるのに(日本でサービスされてないのでイメージできてませんが)、従来からあるアプリのダウンロードがくる前にiPhone専用のAppStoreですからね。とはいっても私自身、AppStoreが出来たからそう思うようになったわけですが。

JavaFX - The load of the Coding Challenge(JFX-LOCC)的文脈で言いたいのは、JavaFX AppStoreがあればいいのにということ。もちろん接続したデバイス(環境)によってダウンロードして購入するのか、Webサービスのアカウントの購入なのか、単にWebサイトをブラウザで表示するだけなのか、様態はいろいろでしょうけど(そして全部に無料がある)。

本当はiTunesに入れたいのですが、現実解として、例えばMacOS用なら、iPhoneのAppStoreライクというか、iPhoneライクというか、そういうウィジェットで、JavaFXアプリにアクセスできたらいいのにと思います。iPhoneのエミュを想像してもらえればイメージが分かると思います。

私に力がつけば、もちろん作ろうと思います。そのときはJavaFXアプリをダウンロードというか、ブラウザで読み込む時というか、認証の確認がうざったいので、もうすこし簡単に操作できるようにしたいですね。私が思うに、もう少し認証が簡単に安く、出来れば無料で作れるようにしてもらい、認証されてないアプリは一切実行しないか、サンドボックス的な環境があれば、そこでしか動作しないということにしてほしいですけどね。あとはデバッグ用にXcodeやNetbeans経由だとアップできるという道を残せば、良いのではないかと。ちょっと安直に考え過ぎかもしれませんが。

2009年4月23日木曜日

JavaFX Coding Challenge

JavaFX.comのCoding Challengeに挑戦します。

JavaFX Coding Challenge

エントリーできるかすら大いに疑問ですが、せっかくチャレンジと言ってくれているので。ということでブログを始めました。コードが出来たら、どこかサイトにアップしていこうと思います。最終的にはnetbeansのサンプルコードのプラグインとして公開したいです。サンプルコードがプラグインというのは、私は初め、何それ?と思ったのですが、プラグインを取り込む仕組みを通じてサンプルコードも取り込むことができるのです(確か)。

まずはjavafx.jpという日本語でのJavaFXユーザグループに参加させて頂きました。

Japan JavaFX User Group

次にgihyo.jpに掲載されている櫻庭祐一さんによる全14回もの詳細な連載記事『ついにベールを脱いだJavaFX』、これに取り組み、余すところなく吸収したいと思います。

その他何か見つけたら、サイドバーのリンクに追加していこうと思いますが、それにはてなブックマーク{tag: "javafx"}が良さげです。

(1) はてぶリーダー for iPhone タグ: javafx
JavaFXのタグを集めたリンクを、http://i.pecipeci.net/hb/t/javafxとして取得できます。なぜfor iPhoneなのかといえば、たまたまiPhoneを使いたかったので、iPhone JavaFXでググったら見つかりました。PCでもこれでいいかなという感じです。

(2) はてなブックマーク タグ検索: javafx
はてぶを使い慣れてないせいか、はてなブックマークのトップページの検索がウェブ検索だったので、いまいちな検索結果だったわけです。なんでわざわざブックマークにいってるのにウェブ検索なのかわかりませんが、いまこれを書いていて、ふとヘルプをみてみると、タグ一覧を開くとそこからタグ検索ができるということが分かりました。なんだこれじゃん...とばかりに早速タグ検索("javafx")のフィードブックマークをいただきました。

結構良いサイトが見つかりそうです。

メインの開発環境はMacBook+NetBeansですが、JavaSE6u10以降の問題がどう働くのか理解していないので、場合によってはWindows Vistaを使わざるを得ないかもしれません。