![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67b6d)
Java初心者です。Javaでは、「ボタンをクリックする」など特定のイベントが発生した時に所定のメソッドを実行する「イベントリスナー」という監視機能があるそうですが、ボタンやマウスの操作の代わりに、「リアルタイムで変動する特定の変数の値がある値を超えたら所定の処理を実行する」という「イベントリスナー」の設定って、できるのでしょうか? これができれば、サーバアプリではないですが、その特定の変数につき常駐監視(常駐化)を行えることになり、起動時の遅さは問題ではなくなるように思うのですが。ネットで調べた限りでは、ボタンやマウスのケースしか紹介されていませんでした。何かヒントをいただけたら、うれしいです。
No.4ベストアンサー
- 回答日時:
一番単純なのは、
while(true){
株価=株価を得る();
if (指定した条件を満す(株価) ) {
買う();
}
}
等というような、一つのプログラムで全部できるようにしてしまうことです。
kmee様、ご回答ありがとうございます。
>一つのプログラムで全部できるようにしてしまうことです
初歩的な質問で申し訳ありません。その例の書き方をすれば、初めに一回起動しておけば、ずーと判定作業を続けてくれる常駐型になるのですか。なにはともあれ、やってみます。
あと、よく考えてみると、株価を取得するプログラム(programB)も、常駐していて証券会社のシステム(サーバ)上の株価が変わった時に、それをフィードし、こちら(クライアント)の株価を書き換えています。変数値を監視し、条件を満たせば自動的に注文を出すprogramAも、それを真似して書けるような気もします。幸い、株価を取得するプログラム(programB)はソースコードもあるので、それを理解する努力をしてみようとも思っています。
No.3
- 回答日時:
>一秒間に100回バイトコードからオブジェクトコードに
>変換するという無駄な処理が発生することになります。
>一日当たりだと8,640,000回の無駄な処理が発生します。
一秒間に100回起動するプログラムがお望みなんでしょうか?
これで問題になるのはおそらく JITよりも VMの起動コストの
方だと思いますが、C++だってプロセスを1秒回に100回
起動すればそれなりの負荷は発生します。毎回同じコードを
メモリにロードするのも同様にばかげた話です。
で、そういうことなら、常駐プログラムを書くだけです。
Linuxなら daemon、Windows なら service を書けば
よいです。
Apache Commons Daemon とかを使うと楽です。
tknakamuri様、ご回答ありがとうございます。
>Linuxなら daemon、Windows なら service を書けば
>よいです。
>Apache Commons Daemon とかを使うと楽です。
新しい知識。私にわかるかどうかわかりませんが、勉強してみます。
No.2
- 回答日時:
そういうGUI用のクラスに、「○○だったら××イベントを発生させる」という処理が実装されているだけです。
そういう処理が実装されていないクラスからはイベントは発生しません。
> 特定の変数につき常駐監視(常駐化)を行えることになり、起動時の遅さは問題ではなくなるように思う
これが何のことだかわかりません。
programA: 常駐して、イベントを受けとったら処理をする常駐プログラム
programB; 「リアルタイムで変動する特定の変数の値」を取得するプログラム
として、programAの常駐有無に係らず、 値の取得には「programBの起動」が必要で、その際の「起動の遅さ」が変わるわけではありません。
kmee様、ご回答ありがとうございます。
>programA: 常駐して、イベントを受けとったら処理をする常駐プログラム
>programB; 「リアルタイムで変動する特定の変数の値」を取得するプログラム
>として、programAの常駐有無に係らず、 値の取得には「programBの起動」が必要で、その際の「起動の遅さ」が変わるわけではありません。
はい、説明が不足しておりました。たとえば、リアルタイムで変動する変数を株価とした場合、おっしゃるとおり株価を取得するprogramBは既に起動されていて、起動の遅さは関係ありません。ただ、たとえばprogramAをロジック判定のプログラム(株価が所定の条件を満たしているかを監視し、満たした瞬間に自動的に注文を出すなど)とし、かつprogramAが現在常駐監視型でない場合、たとえば同じprogramAを一秒間に100回実行することで、10ミリ秒ちょい遅れで株価の動きに反応できると思います。ところが、programAをJavaで書いた場合、バイトコードからネイティブオブジェクトコードに毎回変換してから実行されるので、一秒間に100回バイトコードからオブジェクトコードに変換するという無駄な処理が発生することになります。一日当たりだと8,640,000回の無駄な処理が発生します。これはあまりにも間抜けな話で、初めからネイティブオブジェクトコードにコンパイルできないのでは、この手のプログラムの開発には、JavaではなくC++などを使うべきだということになると思います。実際には、Javaで書いても、GCJを使えば、直接ネイティブオブジェクトコードにコンパイルできるそうですが、まだエラーが解決できておりません。
このような状況で、programAを常駐監視型にできれば、programB同様、初めに一回起動しておけば、ずーと判定作業を続けてくれると思いました。つまり、私は、どうすれば常駐監視型programAを開発できるのかを知りたかったのです。私はJava初心者なので、イベントリスナーを使えばprogramAが常駐監視型になってくれるのかなと思ってしまっただけです。
繰り返しになりますが、結局私の知りたいことは、どうすれば常駐監視型programAを開発できるのかに尽きます。何かヒントをいただけましたら、うれしいです。
No.1
- 回答日時:
>「リアルタイムで変動する特定の変数の値が
>ある値を超えたら所定の処理を実行する」という
>「イベントリスナー」の設定って、できるのでしょうか?
他の質問でも書きましたがJavaは魔法の杖では
ないので、何かを監視するには監視するプログラムが
必要です。イベントとイべントリスナは単にイべントを
コールバックで受け渡すやり方であって、
機能じゃありません。
で、「変数」って具体的に何者ですか?
tknakamuri様、ご回答ありがとうございます。
イべントリスナについての理解が間違っていたようです。勉強し直します。
>で、「変数」って具体的に何者ですか?
何でもいいのですが、たとえば株価を入れる変数などです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBでExcelが起動されているか知...
-
起動したIEのウインドウタイ...
-
バッチスクリプト処理でエラー...
-
Linux環境変数設定(putenv?se...
-
XDRIVEのログインをSENDKEYで自...
-
VB6 二重起動確実防止について
-
Androidエミュレータでレーシン...
-
ソフトのインストール場所って...
-
CPUとOS の違いは?
-
Macの手書き漢字入力ツールにつ...
-
UNIXのPerl環境
-
DOS/V機とは?
-
safariのアンインストール方法...
-
バッチファイルでのスペースの入力
-
ご教授願います PC初心者です。...
-
.cshrcでのエラー
-
CSHが使えない REDHAT
-
Linux Red HatをノートPCに...
-
VPSでLinuxのGUI(デスクトップ...
-
Winでソフトのシリアル番号を調...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッチスクリプト処理でエラー...
-
VBでExcelが起動されているか知...
-
バッチファイルで多重起動を防ぐ
-
Linux環境変数設定(putenv?se...
-
CreateProcessでコンソールアプ...
-
起動したIEのウインドウタイ...
-
コンソールアプリの起動結果待...
-
shell関数について
-
「応答なし」の状態を監視する方法
-
MySQLへのDB::connectで、faile...
-
system関数について
-
VB6 二重起動確実防止について
-
デーモンプロセスの起動について
-
_access関数が EACCES エラーと...
-
RTOS(TOPPERS)プログラムで、動...
-
アプリケーションソフトについて
-
Javaのイベントリスナー機能の応用
-
delphiの最低環境,PCG-C1VRXじ...
-
教えて下さい!Tomcatがstartな...
-
XDRIVEのログインをSENDKEYで自...
おすすめ情報