Part 1:
ランダムなデータ作成はできました。
public static int [] createRandomValues(int seed){
int random[] = new int[seed];
for ( int i = 0; i < seed; i++ ){
random[i] = (int)(Math.random() * seed * (Math.random() > 0.5 ? 1 : -1));
}
return random;
}
上記のメソッドに100を渡すと、-100から+100の間のデータ作成してくれます。
Part 2:
Mainの中にThread作成し、そのThread内から上記のデータ作成部分と描画する部分呼んでいます。Threadだからずっと(連続で)動いて、表示も連続的な表示してほしいけど、固定で一つ画面分表示したままです。リアル・タイムデータ表示みたいに流れた波形を表示してほしいです。
public static void main(String[] args) {
Thread t1 = new Thread(new Runnable(){
public void run() {
int[] data = createRandomValues(100);
m_plotPanels.plot(data); //描画ルーチンです。
}
});
t1.start();
}
ユーザが画面の「X」を押さないとずっと乱数の配列作られて、そのデータを使って連続表示するのにどうすればよいでしょうか。乱数使っているので次次呼ばれる際、変わった値が出てくるはずですのでリアル・タイムの連続データのように表示されたらうれしい。
使用メモリもどんどん増えないように気を付けないといけないです。
実際の現場ではデータ作成レートが高く、一度バッファーに格納し、間引きしてから表示することも必要ででしょうけど、今回は低速度のデータを順番に表示していきたいと思っています。
知識や経験おもちの方々、アドバイスください。
とりあえす、「このような技術がある」や「こうすればうまく行く」などでも助かります。
よろしくお願いいたします。
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
>Thread処理はPart2に書いたとおりで、そのほかはありません。
う~ん、結局詳細は伏せたままにしたいようなので
具体的な指摘は諦めますが
繰り返しになりますが
swingではメインスレッドでしか描画できない
というのは当然考慮したコードになってるのですよね?
Part2に書いた通り、描画処理はメインスレッド内書かれています。
run()処理内、whileループを設けて、データ作成と描画コードをwhileループ内に書いてみました。
これによって、連続的に描画します。Thread.sleep(nnnミリ秒)記述で見やすいタイミングで描画可能ですが、スレッドを止める方法はまだわからない。よって、表示されたdialogの「X」押してもスレッドの読み込みは継続されます。(System.outのところ、ずっと表示し続きます。)
Thread t1 = new Thread(new Runnable(){
public void run() {
boolean running = true;
while(running) {
System.out.println(" test at " + System.currentTimeMillis());
double[] data = createRandomValues(100);
m_plotPanels[0].plot(data);
Thread.sleep(3000); //try, catch省略
}
}
});
t1.start();
※ソースはインデントできないようで読みづらいです。申し訳ありません。
No.3
- 回答日時:
無限ループにしちゃいけないんだろうかと思案しつつ, createRandomValues の動作が奇妙だなぁと指摘しよう.
createRandomValuesは呼ばれるたびにランダムな値の配列返す前提で、話題の議論を進めていただきたいです。問題は「どうやってThreadを回し続ける」です。 よろしくお願いします。
No.2
- 回答日時:
>描画処理は外部ライブラリで、長いから省略しました。
>問題はどうやってrunの中の処理をずっと回しっぱなしにする、
まずグラフィックスライブラリは何を使ってますか?
JavaFX?、Swing?
また上手くゆかないなら問題の再現する必要最小限のコードか
コードの概略を示すのが常識です。
例えばスレッドからメインスレッドの描画処理の呼び出しを
どう書いてますか?
FrameやパネルなどはSwingです。レンダリング自体はカリフォルニア大学バークレー校のPtolemyというパッケージ使っています。
http://ptolemy.eecs.berkeley.edu/java/ptplot/
描画処理は値が入っている配列を入力パラメーターになっているのでPart2にdataとして渡しています。
Thread処理はPart2に書いたとおりで、そのほかはありません。
No.1
- 回答日時:
>固定で一つ画面分表示したままです
の意味が分からないし、具体的な描画処理のコードも無し。
描画に使用しているライブラりさえ書いてない。
これではどうにもならないですね。
tknakamuriさん、
書き込みありがとうございます。
「一つ画面分表示したまま」というのは、runの中の処理が一回しか呼ばれてないと言いたかったです。描画処理は外部ライブラリで、長いから省略しました。問題はどうやってrunの中の処理をずっと回しっぱなしにする、それです。runを繰り返し呼ばれると、part 1の出力が変わる(乱数ですので)ので、表示される画面(波形)が変わると想定しています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
- C言語・C++・C# C言語初心者 ポインタについて、お助けください、、 2 2023/03/15 23:50
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
- C言語・C++・C# TCP/IP通信時のサーバーからの受信 2 2022/11/23 09:11
- C言語・C++・C# このプログラミングの問題を教えて欲しいです。 キーボードから整数kを入力し、kが配列aの中に何個存在 2 2022/12/19 22:50
- C言語・C++・C# 大量のデータを読み込んで表示する速度を改善したい 8 2023/05/07 13:29
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C# リストビューの特定のセルの...
-
VS Treeview のデザイン変更
-
SwingとEDT(イベントディスパッ...
-
画面のちらつきの原因が知りた...
-
VB.NET フォーム上に描いたグ...
-
株価チャートソフトを作るのに
-
VB.NETのSendMessageを教えてく...
-
iアプリでポップアップメニュー...
-
「タイプ初期化子が例外をスロ...
-
エクセルVBAで、条件に一致する...
-
変数名の付け方
-
オブジェクト参照がオブジェク...
-
java eclipse 型に解決できません
-
インスタンス参照でアクセスで...
-
VB.NET getとsetの概念がわかり...
-
C# インスタンスの破棄
-
final修飾子を使っているのに、...
-
生成したインスタンスを削除す...
-
「インスタンス」の意味をわか...
-
Java初級 引数に適用できません
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB.NET フォーム上に描いたグ...
-
JAVAでの背景画像表示
-
VB.NETのSendMessageを教えてく...
-
C# DataGridView のCellPaintin...
-
Labelコントロールの背景をグラ...
-
C# リストビューの特定のセルの...
-
画面のちらつきの原因が知りた...
-
canvasで表示されてる画像を1...
-
重なった要素上でのイベントで...
-
SwingとEDT(イベントディスパッ...
-
描画してもウィンドウをリサイ...
-
株価チャートソフトを作るのに
-
Javaで文字の角度を変えて表示...
-
アクセスで他アプリから復帰し...
-
Androidで画像の中で指定した範...
-
JavaでのDirectXの使用
-
Java、jPanelに描画する
-
描画処理が実行されない
-
VS Treeview のデザイン変更
-
C# テキストボックスについて
おすすめ情報
1. whileループ修正: while(true && !this.isInterrupted()){
2. run()の後以下追加:
private boolean isInterrupted() {
return false;
}
3. JFrameやDialogに、actionListener追加
XXXXX.addWindowListener(new WindowAdapter() {
public void windowClosed(WindowEvent e) {
System.exit(1);
}
});
※上記でやりたいことすべてできました。
ディスカションに参加されたみなさま、ありがとうございました。