KeyListnerが動かない [JAVAでプログラム]
(2018.06.22)
『作ったプログラムはWindow PCでもLinuxマシンでもRaspiでも動く』という所に魅力を感じて、GUIアプリの開発はJAVA Swingでやっています。しかし知識が浅いので、不具合の原因を見つけるのにいつも苦労します。今回もJPanelに組み込んだKeylistnerが動かない原因が判らず、ジタバタしました。orz
結論から言うと、以下のコードが原因でした。
setFocusCycleRoot(true);
これがあると、その後に以下のコードを書いても、JPanelはFocusを得ることが 出来ません。
setFocusable(true);
やれやれ。
『作ったプログラムはWindow PCでもLinuxマシンでもRaspiでも動く』という所に魅力を感じて、GUIアプリの開発はJAVA Swingでやっています。しかし知識が浅いので、不具合の原因を見つけるのにいつも苦労します。今回もJPanelに組み込んだKeylistnerが動かない原因が判らず、ジタバタしました。orz
結論から言うと、以下のコードが原因でした。
setFocusCycleRoot(true);
これがあると、その後に以下のコードを書いても、JPanelはFocusを得ることが 出来ません。
setFocusable(true);
やれやれ。
プログラムが冗長だと叱られた [JAVAでプログラム]
(2014.09.12)
Netbeansは強力なJAVAプログラム支援機能を備えています。コード補完は元より、import文を自動挿入したり、ラムダ式に変換してくれたり・・・
あるところで、次のコードを書いたらプログラムが冗長だと叱られました。
意味は判るけど、この記述は好きになれないなぁ~
どうしよう!
大人しく言うことを聞いてあげる?
Netbeansは強力なJAVAプログラム支援機能を備えています。コード補完は元より、import文を自動挿入したり、ラムダ式に変換してくれたり・・・
あるところで、次のコードを書いたらプログラムが冗長だと叱られました。
if( receive_buff[0] == 'B' ){ busy_flag = true; } else{ busy_flag = false; } Netbeansの推奨する記述はこうでした。 busy_flag = receive_buff[0] == 'B';
意味は判るけど、この記述は好きになれないなぁ~
どうしよう!
大人しく言うことを聞いてあげる?
|
|
|
Robotクラスを試してみた(その2) [JAVAでプログラム]
(2013.10.08)
Java関連のサイトで、awtのRobotクラス(これです)を見つけ、あれこれ試しています。
”Java プラットフォーム実装テストを自動化することを目的とする”という説明を読んで、JVMのレベルで”入力イベントを生成する”のだと思っていました。しかし、”ネイティブなシステム入力イベントを生成する”という説明に引っかかりを覚えました。
『もしかして、X-window上で他のアプリにもアクセスできる?』
CygwinからRasberry pi(Raspbian)のX-window(lxsession)を立ち上げ、Robotクラスのテスト・アプリを動かしてみると・・・
ビンゴ~
Emacsにカーソルを置いて、文字入力できることが判りました。
使いこなすのは大変かもしれませんが、何だか面白いことが出来そうです。
ところで、Emacsに入力する文字列を生成しようとして、Shift入力で躓きました。
<駄目なコード>
ここを見て納得しましたが、どうやったら”shift+a”を入力できるのでしょうか?
先達の知恵を求め、こんなコードに出会いました。
なるほど!
Java関連のサイトで、awtのRobotクラス(これです)を見つけ、あれこれ試しています。
”Java プラットフォーム実装テストを自動化することを目的とする”という説明を読んで、JVMのレベルで”入力イベントを生成する”のだと思っていました。しかし、”ネイティブなシステム入力イベントを生成する”という説明に引っかかりを覚えました。
『もしかして、X-window上で他のアプリにもアクセスできる?』
CygwinからRasberry pi(Raspbian)のX-window(lxsession)を立ち上げ、Robotクラスのテスト・アプリを動かしてみると・・・
ビンゴ~
Emacsにカーソルを置いて、文字入力できることが判りました。
使いこなすのは大変かもしれませんが、何だか面白いことが出来そうです。
ところで、Emacsに入力する文字列を生成しようとして、Shift入力で躓きました。
<駄目なコード>
private void key_click(int key) { robot.keyPress( key ); robot.keyRelease( key ); } key_click(KeyEvent.VK_A); <== 'a' key_click(KeyEvent.VK_SHIFT+KeyEvent.VK_A); <== 'q'
ここを見て納得しましたが、どうやったら”shift+a”を入力できるのでしょうか?
先達の知恵を求め、こんなコードに出会いました。
private void doType(int... keyCodes) { doType(keyCodes, 0, keyCodes.length); } private void doType(int[] keyCodes, int offset, int length) { if (length == 0) { return; } robot.keyPress(keyCodes[offset]); doType(keyCodes, offset + 1, length - 1); robot.keyRelease(keyCodes[offset]); }
なるほど!
|
|
|
Robotクラスを試してみた(その1) [JAVAでプログラム]
(2013.10.07)
久しぶりにJava関連のサイトを検索していて、awtの面白いクラス(これです)を見つけました。
”マウスやキーボードで制御されるアプリケーションに、ネイティブなシステム入力イベントを生成する”クラスです。”Java プラットフォーム実装テストを自動化すること”を目的とするのだそうですが、実際にマウス・カーソルを移動させることが出来るので、他の目的にも使えそうです。
早速プログラム(マウスの動きを記録して、逆に再生する)を作って、Raspberry piのXwindow上で動くかどうか試してみました。
動きました!
PICからI2C経由でデータを送って、マウス・カーソルを操作できそうです。
どんな役に立つか具体的なイメージはありませんが、例えば『XYステージの動作位置をマウス・カーソルで表示する』なんてことが出来るかもしれません。
ちょっと面白くなってきました。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
管理人が気になっている広告です。
久しぶりにJava関連のサイトを検索していて、awtの面白いクラス(これです)を見つけました。
”マウスやキーボードで制御されるアプリケーションに、ネイティブなシステム入力イベントを生成する”クラスです。”Java プラットフォーム実装テストを自動化すること”を目的とするのだそうですが、実際にマウス・カーソルを移動させることが出来るので、他の目的にも使えそうです。
早速プログラム(マウスの動きを記録して、逆に再生する)を作って、Raspberry piのXwindow上で動くかどうか試してみました。
public static void main( String args[] ) { ArrayListmouse_log = new ArrayList<>(); int times = Integer.valueOf( args[ 1 ] ); int interval = Integer.valueOf( args[ 0 ] ); System.out.printf("Interval %dms\n", interval*100); System.out.printf("Times %d\n", times); try { robot = new Robot(); robot.setAutoDelay(100); } catch ( Exception e ) { e.printStackTrace(); return; } for( int loop=0;loop =0;loop--) { Point mp = mouse_log.get( loop ); System.out.printf("Mouse %d , %d\n",mp.x, mp.y); robot.mouseMove(mp.x, mp.y); try { Thread.sleep( 100*interval); } catch (InterruptedException ex) { Logger.getLogger(Robot_Test.class.getName()).log(Level.SEVERE, null, ex); } }
動きました!
PICからI2C経由でデータを送って、マウス・カーソルを操作できそうです。
どんな役に立つか具体的なイメージはありませんが、例えば『XYステージの動作位置をマウス・カーソルで表示する』なんてことが出来るかもしれません。
ちょっと面白くなってきました。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
管理人が気になっている広告です。
|
|
|
bcm2835_for_java(仮称)の体裁がまとまってきた [JAVAでプログラム]
(2013.09.16)
C言語で書かれたBCM2835ライブラリ(これです)をJAVAから呼び出す仕組み(<==bcm2835_for_java)の開発を続けてきましたが、少しずつ体裁がまとまってきました。
アプリケーションで使用するファイルは以下の3つです。
bcm2835.jar <== BCM2835ライブラリのラッパー
libbcm_interface.so <== JAVAプロセス側のインターフェース関数群
bcm2835_for_java <== BCMプロセス側のインターフェース関数群(root権限で動作する)
Raspberry piでLEDを点滅するJAVAプログラムはこんな感じです。
ライブラリの呼び出しをすっきり記述できるように整理しました。
<以前のコード>
BCMInterface.INSTANCE.bi_init(args[0]);
BCMInterface.INSTANCE.bi_bcm2835_init();
<今のコード>
bcm2835.bi_init(args[0]);
ソース・コードの見苦しい点には目をつぶり、簡単な説明を付けてGITHUBに登録しようと考えているのですが・・・
GITがよく判らない(爆)
C言語で書かれたBCM2835ライブラリ(これです)をJAVAから呼び出す仕組み(<==bcm2835_for_java)の開発を続けてきましたが、少しずつ体裁がまとまってきました。
アプリケーションで使用するファイルは以下の3つです。
bcm2835.jar <== BCM2835ライブラリのラッパー
libbcm_interface.so <== JAVAプロセス側のインターフェース関数群
bcm2835_for_java <== BCMプロセス側のインターフェース関数群(root権限で動作する)
Raspberry piでLEDを点滅するJAVAプログラムはこんな感じです。
import dkl.bcm2835; public class Example { static final byte PIN = bcm2835.RPI_GPIO_P1_11; public static void main(String[] args) { bcm2835.bi_init(args[0]); bcm2835.gpio_fsel(PIN, bcm2835.BCM2835_GPIO_FSEL_OUTP); for(int i=0; i<5; i++ ) { bcm2835.gpio_write(PIN, bcm2835.HIGH); bcm2835.bi_delay(500); bcm2835.gpio_write(PIN, bcm2835.LOW); bcm2835.bi_delay(500); } if( bcm2835.ope_sync() != 0 ) { System.out.print("ope_sync error\n"); } bcm2835.bi_close(); } }
ライブラリの呼び出しをすっきり記述できるように整理しました。
<以前のコード>
BCMInterface.INSTANCE.bi_init(args[0]);
BCMInterface.INSTANCE.bi_bcm2835_init();
<今のコード>
bcm2835.bi_init(args[0]);
ソース・コードの見苦しい点には目をつぶり、簡単な説明を付けてGITHUBに登録しようと考えているのですが・・・
GITがよく判らない(爆)
|
|
|
LinuxマシンでJDK1.8.0を動かしてみた [JAVAでプログラム]
(2013.08.17)
Linuxマシン(<==CentOS 6)でJDK1.8.0とNetbeans7.4βを試してみました。
最初Cygwinで試そうとしたのですが、Linux版が動かない(Windows版を使うらしい)ので、CentOS 6が走っているサーバ・マシンで試しました。
今回もRaspberry piのときと同様に、CygwinのXサーバを立ち上げます。
そしてCygwinのコンソールで
==> $ xinit
Cygwin/Xウィンドウ内のコンソールで
==> $ ssh -Y admin@192.168.*.*
==> password入力
CentOSのリモート・コンソールで
==> $ gnome-session
これでCygwinのXwindowにCentOSのgnomeデスクトップが表示されます。
さすがにgnomeは使いやすく、Linux版のJDK1.8.0とSample&Demo、そしてNetbeans7.4βをWEBからダウンロードしてインストールするのも簡単でした。
Linux版のJDK1.8.0であれば、Netbeans7,4でJAVAFXのプログラムをビルドできました。また、サンプルのStopwatch.jarも以下のコマンドで試すことが出来ました。
$ java -version
java version "1.8.0-ea"
Java(TM) SE Runtime Environment (build 1.8.0-ea-b102)
Java HotSpot(TM) 64-Bit Server VM (build 25.0-b44, mixed mode)
$ cd javafx-samples-8.0.0-ea
$ java -jar Stopwatch.jar
やっとStopwatchが動いた
CygwinのXサーバは慣れればとても便利です。長らく利用してきた4chのKVMスイッチを引退させるときが来たようです。
Linuxマシン(<==CentOS 6)でJDK1.8.0とNetbeans7.4βを試してみました。
最初Cygwinで試そうとしたのですが、Linux版が動かない(Windows版を使うらしい)ので、CentOS 6が走っているサーバ・マシンで試しました。
今回もRaspberry piのときと同様に、CygwinのXサーバを立ち上げます。
そしてCygwinのコンソールで
==> $ xinit
Cygwin/Xウィンドウ内のコンソールで
==> $ ssh -Y admin@192.168.*.*
==> password入力
CentOSのリモート・コンソールで
==> $ gnome-session
これでCygwinのXwindowにCentOSのgnomeデスクトップが表示されます。
さすがにgnomeは使いやすく、Linux版のJDK1.8.0とSample&Demo、そしてNetbeans7.4βをWEBからダウンロードしてインストールするのも簡単でした。
Linux版のJDK1.8.0であれば、Netbeans7,4でJAVAFXのプログラムをビルドできました。また、サンプルのStopwatch.jarも以下のコマンドで試すことが出来ました。
$ java -version
java version "1.8.0-ea"
Java(TM) SE Runtime Environment (build 1.8.0-ea-b102)
Java HotSpot(TM) 64-Bit Server VM (build 25.0-b44, mixed mode)
$ cd javafx-samples-8.0.0-ea
$ java -jar Stopwatch.jar
やっとStopwatchが動いた
CygwinのXサーバは慣れればとても便利です。長らく利用してきた4chのKVMスイッチを引退させるときが来たようです。
|
|
|
JavaFX Ensembleのコードを拾い読みした [JAVAでプログラム]
(2013.01.23)
ここ暫く、JavaFX2のTutorialやサンプルをあれこれ試してきました。しかし、いざ自分でアプリを設計しようとすると、判らないことだらけです。実際のところ、プログラム・コードをコピペしたり、プロジェクトごとインポートしただけですから、それでJavaFX2が使えるようになる筈はありません。
”LoginCSSのFXML化”をなんとか(自力で)クリアしたので、(1)JavaFXの新規プロジェクトを立ち上げ、(2)必要なコントロールをFXMLで配置し、(3)CSSで表現し、(4)Controller.javaで操作する(<==これはちょっと怪しい)ことは出来る筈です。しかし、その先(画面を切り替える方法とか、ポップ・アップ・ウィンドウの作り方とか)が判りません。
画面の切替は”FXML-LoginDemo”でやったので、そのプログラム・ソースを参考にすればなんとかなりそうです。しかし、ポップ・アップ・ウィンドウの方はJavaFXのTutorialやサンプルで見た記憶がありません。Web検索を掛けても、ヒットするのはJavaFX1.0の例(多分そうだと思う)です。
”困ったことになった”と思い、JavaFX Ensembleのソース・フォルダに”popup"でGrepを掛けて見ると・・・
ビンゴ~!
ここで使っていた
右上のSearchBoxの所でContextMenu()、Popup()、Tooltip()を使っていました。ソース・ファイルはこれ”src\Ensemble\src\ensemble\controls\SearchBox.java”です。
プログラム・ソースを解読出来るかどうか判りませんが、”javadocの何処を読めば良いか”だけは親族SNS管理人にも判ります。
あとは実践あるのみ?
ここ暫く、JavaFX2のTutorialやサンプルをあれこれ試してきました。しかし、いざ自分でアプリを設計しようとすると、判らないことだらけです。実際のところ、プログラム・コードをコピペしたり、プロジェクトごとインポートしただけですから、それでJavaFX2が使えるようになる筈はありません。
”LoginCSSのFXML化”をなんとか(自力で)クリアしたので、(1)JavaFXの新規プロジェクトを立ち上げ、(2)必要なコントロールをFXMLで配置し、(3)CSSで表現し、(4)Controller.javaで操作する(<==これはちょっと怪しい)ことは出来る筈です。しかし、その先(画面を切り替える方法とか、ポップ・アップ・ウィンドウの作り方とか)が判りません。
画面の切替は”FXML-LoginDemo”でやったので、そのプログラム・ソースを参考にすればなんとかなりそうです。しかし、ポップ・アップ・ウィンドウの方はJavaFXのTutorialやサンプルで見た記憶がありません。Web検索を掛けても、ヒットするのはJavaFX1.0の例(多分そうだと思う)です。
”困ったことになった”と思い、JavaFX Ensembleのソース・フォルダに”popup"でGrepを掛けて見ると・・・
ビンゴ~!
ここで使っていた
右上のSearchBoxの所でContextMenu()、Popup()、Tooltip()を使っていました。ソース・ファイルはこれ”src\Ensemble\src\ensemble\controls\SearchBox.java”です。
プログラム・ソースを解読出来るかどうか判りませんが、”javadocの何処を読めば良いか”だけは親族SNS管理人にも判ります。
あとは実践あるのみ?
|
|
|
”Java技術最前線(7年分)”を読みふけった [JAVAでプログラム]
(2013.01.22)
古くからJavaの技術トレンドを追い続けている”Java技術最前線”<これです>を、二日かけてざ~っと拾い読み(さすがにJAVAFX1.0の記事は飛ばした)しました。
お陰でJAVAの現状に対する理解が(少し)深まったように思います。
そして先ほど、NetBeans IDEのsampleプロジェクトの中に”JavaFX Ensemble”を見つけました。JavaFXの機能を網羅的に紹介したアプリで、プログラム・コードやjavadocの表示機能も備えています。JavaFXの初心者にとって、大変心強いお手本です。
nativeアプリにしてみた
早速、Windowsネイティブ・アプリにして、デスクトップにショートカットを設けました。こうしておけば、NetBeansで開発中に何か判らないことが出来たら、直ぐに”JavaFX Ensembleで動作確認できる”という訳です。
いよいよ、自作のアプリに取り組む時がやってきたのでしょうか?
古くからJavaの技術トレンドを追い続けている”Java技術最前線”<これです>を、二日かけてざ~っと拾い読み(さすがにJAVAFX1.0の記事は飛ばした)しました。
お陰でJAVAの現状に対する理解が(少し)深まったように思います。
そして先ほど、NetBeans IDEのsampleプロジェクトの中に”JavaFX Ensemble”を見つけました。JavaFXの機能を網羅的に紹介したアプリで、プログラム・コードやjavadocの表示機能も備えています。JavaFXの初心者にとって、大変心強いお手本です。
nativeアプリにしてみた
早速、Windowsネイティブ・アプリにして、デスクトップにショートカットを設けました。こうしておけば、NetBeansで開発中に何か判らないことが出来たら、直ぐに”JavaFX Ensembleで動作確認できる”という訳です。
いよいよ、自作のアプリに取り組む時がやってきたのでしょうか?
|
|
|
XMLに再挑戦することにした [JAVAでプログラム]
(2013.01.20)
JavaFX Tutorialの課題で一つだけ達成できなかったのが”LoginCSSのXML化”です。そのときは、『XMLを使わなければ問題無い訳だし・・・』と気軽にスルーしましたが、GUIコンポーネントをXMLで記述するのがJavaFX2の流儀(?)らしいと判ってきて、『使わなければ問題無い』などと嘯いている訳にはいかなくなりました。
幸い、<こちら>のサンプルに動作するお手本(FXML-LoginDemo)を見つけました。
<お手本はこんな感じ>
デザインも格好良い
しかも実用的
実は、NetBeansの新規プロジェクトで”JavaFX FXMLアプリケーション”を選ぶと、こんなFXMLアプリケーションの雛形が出来るのです。
JavaFX FXMLアプリの雛形
<XMLはこんな感じ>
Tutorialのコードとは少し違いますが、これを書き換える方法で”LoginCSSのXML化”の課題に再挑戦してみました。
すると、XMLを一つ追加しただけで見覚えのあるエラー・メッセージがポップ・アップしました。
早速現われた
そして、出力結果ペインには、こんなメッセージが表示されていました。
”Text is not a valid type.”
現状のXMLとお手本を見比べ、欠けていた<?import javafx.scene.text.*?>を追加すると・・・
ビンゴ~!
第一関門突破です。
どうやら、実行時にXMLファイルの不備が検出されると、あのエラー・メッセージがポップ・アップするようです。
前回敗退した<stylesheets>に必要なimport指定はこれでした。
<?import java.net.*?>
出力結果ペインに表示される、”URL is not a valid type.”というメッセージがimport指定の不備を示していることに、気付かなかった(と言うか知らなかった)のです。
そして、完成したLoginFXMLがこれです。(Scene Builder 1.1もちょっとだけ使ってみた)
やっと完成した
これで、JavaFXのTutorialも卒業(かな?)
JavaFX Tutorialの課題で一つだけ達成できなかったのが”LoginCSSのXML化”です。そのときは、『XMLを使わなければ問題無い訳だし・・・』と気軽にスルーしましたが、GUIコンポーネントをXMLで記述するのがJavaFX2の流儀(?)らしいと判ってきて、『使わなければ問題無い』などと嘯いている訳にはいかなくなりました。
幸い、<こちら>のサンプルに動作するお手本(FXML-LoginDemo)を見つけました。
<お手本はこんな感じ>
デザインも格好良い
しかも実用的
実は、NetBeansの新規プロジェクトで”JavaFX FXMLアプリケーション”を選ぶと、こんなFXMLアプリケーションの雛形が出来るのです。
JavaFX FXMLアプリの雛形
<XMLはこんな感じ>
<?xml version="1.0" encoding="UTF-8"?> <?import java.lang.*?> <?import java.util.*?> <?import javafx.scene.*?> <?import javafx.scene.control.*?> <?import javafx.scene.layout.*?> <AnchorPane id="AnchorPane" prefHeight="200" prefWidth="320" xmlns:fx="http://javafx.com/fxml" fx:controller="javafxml_template.SampleController"> <children> <Button layoutX="126" layoutY="90" text="Click Me!" onAction="#handleButtonAction" fx:id="button" /> <Label layoutX="126" layoutY="120" minHeight="16" minWidth="69" fx:id="label" /> </children> </AnchorPane>
Tutorialのコードとは少し違いますが、これを書き換える方法で”LoginCSSのXML化”の課題に再挑戦してみました。
すると、XMLを一つ追加しただけで見覚えのあるエラー・メッセージがポップ・アップしました。
早速現われた
そして、出力結果ペインには、こんなメッセージが表示されていました。
”Text is not a valid type.”
現状のXMLとお手本を見比べ、欠けていた<?import javafx.scene.text.*?>を追加すると・・・
ビンゴ~!
第一関門突破です。
どうやら、実行時にXMLファイルの不備が検出されると、あのエラー・メッセージがポップ・アップするようです。
前回敗退した<stylesheets>に必要なimport指定はこれでした。
<?import java.net.*?>
出力結果ペインに表示される、”URL is not a valid type.”というメッセージがimport指定の不備を示していることに、気付かなかった(と言うか知らなかった)のです。
そして、完成したLoginFXMLがこれです。(Scene Builder 1.1もちょっとだけ使ってみた)
やっと完成した
これで、JavaFXのTutorialも卒業(かな?)
|
|
|
JavaFXとSWT/JFaceをThread化してみた [JAVAでプログラム]
(2013.01.18)
NetBeansの環境にもかなり馴染んで、やりたいことが出来るようになってきました。そこで、JavaFXとSWT/JFaceのプログラムを同時に動かしてみることにしました。
例えばこんなコードだとJavaFXとSWT/JFaceは同時に動作せず、JavaFXTestが終了してからFileViewerが動くことになります。
こんなコードにするとJavaFXとSWT/JFaceのプログラムが同時に動きました。(正しい方法かどうか判りません)
JavaFXとSWT/JFaceが同時に動いた
”JavaFXはThread-safeでは無い”らしいので、単にThreadから起動出来ただけでは問題を生じるかもしれません。<ここ>に記されている方法(javafx.concurrent Packageを使う)にも慣れておく必要がありそうです。
concurrent Taskを試してみた
backgroundでカウントUPするタスクを動かし、そのカウント値でHelloWorldウィンドウのProgressBarを更新している。この画像は6秒くらい経過したときの様子。
Javaには丁寧なTutorialが用意されていて、入り易そうに見えます。しかし、一歩踏み込むと情報が錯綜していて、新しい情報と古い情報の区別がつかない初学者にとってハードルの高い世界だと感じました。まぁ、”やりがいがある”と言えばそうなんですが・・・
------------------------------------------
先日、”NetBeansがスタンド・アローン用の実行ファイルを用意する”と書きましたが間違いでした。これはJavaFX2.2の機能で、NetBeansがそれに対応しているということらしいです。
NetBeansの環境にもかなり馴染んで、やりたいことが出来るようになってきました。そこで、JavaFXとSWT/JFaceのプログラムを同時に動かしてみることにしました。
例えばこんなコードだとJavaFXとSWT/JFaceは同時に動作せず、JavaFXTestが終了してからFileViewerが動くことになります。
public class Sample { public static void main(String[] args) { JavaFXTest.main(args); FileViewer.main(args); } }
こんなコードにするとJavaFXとSWT/JFaceのプログラムが同時に動きました。(正しい方法かどうか判りません)
class FXthread extends Thread { public void run() { System.out.println("** JavaFX Rub ****"); JavaFXJFaceSWT JavaFX = new JavaFXJFaceSWT(); JavaFX.main(null); } } class JFthread extends Thread { public void run() { System.out.println("** JFaceSWT Run ****"); FileViewer.main(null); } } public class Main { public static void main(String[] args) { System.out.println("** FXthread **"); FXthread runFX = new FXthread(); System.out.println("** JFthread **"); JFthread runJF = new JFthread(); runFX.start(); runJF.start(); System.out.println("last line in Main.main()"); } }
JavaFXとSWT/JFaceが同時に動いた
”JavaFXはThread-safeでは無い”らしいので、単にThreadから起動出来ただけでは問題を生じるかもしれません。<ここ>に記されている方法(javafx.concurrent Packageを使う)にも慣れておく必要がありそうです。
concurrent Taskを試してみた
backgroundでカウントUPするタスクを動かし、そのカウント値でHelloWorldウィンドウのProgressBarを更新している。この画像は6秒くらい経過したときの様子。
Javaには丁寧なTutorialが用意されていて、入り易そうに見えます。しかし、一歩踏み込むと情報が錯綜していて、新しい情報と古い情報の区別がつかない初学者にとってハードルの高い世界だと感じました。まぁ、”やりがいがある”と言えばそうなんですが・・・
------------------------------------------
先日、”NetBeansがスタンド・アローン用の実行ファイルを用意する”と書きましたが間違いでした。これはJavaFX2.2の機能で、NetBeansがそれに対応しているということらしいです。
|
|
|