Java初心者です。Javaでは、「ボタンをクリックする」など特定のイベントが発生した時に所定のメソッドを実行する「イベントリスナー」という監視機能があるそうですが、ボタンやマウスの操作の代わりに、「リアルタイムで変動する特定の変数の値がある値を超えたら所定の処理を実行する」という「イベントリスナー」の設定って、できるのでしょうか? これができれば、サーバアプリではないですが、その特定の変数につき常駐監視(常駐化)を行えることになり、起動時の遅さは問題ではなくなるように思うのですが。ネットで調べた限りでは、ボタンやマウスのケースしか紹介されていませんでした。何かヒントをいただけたら、うれしいです。
No.1
- 回答日時:
>「リアルタイムで変動する特定の変数の値が
>ある値を超えたら所定の処理を実行する」という
>「イベントリスナー」の設定って、できるのでしょうか?
他の質問でも書きましたがJavaは魔法の杖では
ないので、何かを監視するには監視するプログラムが
必要です。イベントとイべントリスナは単にイべントを
コールバックで受け渡すやり方であって、
機能じゃありません。
で、「変数」って具体的に何者ですか?
tknakamuri様、ご回答ありがとうございます。
イべントリスナについての理解が間違っていたようです。勉強し直します。
>で、「変数」って具体的に何者ですか?
何でもいいのですが、たとえば株価を入れる変数などです。
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.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.4ベストアンサー
- 回答日時:
一番単純なのは、
while(true){
株価=株価を得る();
if (指定した条件を満す(株価) ) {
買う();
}
}
等というような、一つのプログラムで全部できるようにしてしまうことです。
kmee様、ご回答ありがとうございます。
>一つのプログラムで全部できるようにしてしまうことです
初歩的な質問で申し訳ありません。その例の書き方をすれば、初めに一回起動しておけば、ずーと判定作業を続けてくれる常駐型になるのですか。なにはともあれ、やってみます。
あと、よく考えてみると、株価を取得するプログラム(programB)も、常駐していて証券会社のシステム(サーバ)上の株価が変わった時に、それをフィードし、こちら(クライアント)の株価を書き換えています。変数値を監視し、条件を満たせば自動的に注文を出すprogramAも、それを真似して書けるような気もします。幸い、株価を取得するプログラム(programB)はソースコードもあるので、それを理解する努力をしてみようとも思っています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- デスクトップパソコン ん~…分からん 7 2022/06/10 10:47
- Java java 次の機能を有するメソッドを自クラスに作成し、実装したいです。 機能 名前判定機能 →名前が 3 2022/06/16 16:08
- 政治 政治に関する疑問を色々ぶつけられるイベントについて 1 2022/12/13 15:43
- マウス・キーボード Bluetoothのクイックペアリングについて 8 2023/03/25 16:50
- JavaScript [Java] Edgeでのアドレスバー非表示について 3 2022/04/20 17:51
- Java java 飾子を付けること(public static・・・) ・コンソールへの出力処理はmainメ 2 2022/06/16 19:34
- Visual Basic(VBA) VBA 画面上のカーソルに文字数字を入力するコードを教えて下さい 1 2022/10/30 10:31
- マウス・キーボード キーボード設定で困っています。長文です。 2 2022/12/10 12:44
- Android(アンドロイド) スマホ chromeの戻るボタンが機能しにくい スマホ(OPPO reno5A、Android12) 1 2022/09/11 20:39
- デジタルカメラ sony a7ii と 富士フイルムX-T2について 【sony a7ii】 数値変動・動画ボタンの 1 2023/03/21 01:14
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBでExcelが起動されているか知...
-
バッチスクリプト処理でエラー...
-
Linux環境変数設定(putenv?se...
-
コンソールアプリの起動結果待...
-
CGIでinit.dで起動したプロセス...
-
CygwinをインストールしたけどX...
-
誰かにサーバにあるデータを消...
-
CSHが使えない REDHAT
-
aptでインストールしたプログラ...
-
Linux●前の行に戻れません...
-
パソコンでCDでデータを読まな...
-
batファイルのエラー
-
linuxのsshの反応が非常に遅い。
-
リナックスを使えるパソコン
-
Macの手書き漢字入力ツールにつ...
-
expectの使い方について
-
WindowsへCentOSのDVDドライブ...
-
Linuxで/usr/local/sbin/と/etc/cr
-
今から始めるならどのLINUX?
-
PowerShellで自分が書いたコマ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッチスクリプト処理でエラー...
-
バッチファイルで多重起動を防ぐ
-
VBでExcelが起動されているか知...
-
Linux環境変数設定(putenv?se...
-
コンソールアプリの起動結果待...
-
「応答なし」の状態を監視する方法
-
_access関数が EACCES エラーと...
-
Open Office Org 急に起動しな...
-
VBを用いてログオフから自動で...
-
起動したIEのウインドウタイ...
-
OLEサーバコンポーネントを作っ...
-
MySQLへのDB::connectで、faile...
-
ASP.NET 2.0(VB)からEXCELオブ...
-
CreateProcessでコンソールアプ...
-
プリンタの状態を知る方法
-
RTOS(TOPPERS)プログラムで、動...
-
VB6 二重起動確実防止について
-
system関数について
-
デーモンプロセスの起動について
-
仮想メモリ増加
おすすめ情報