ボールを左から右に動かすようなプログラムを組んだのですがスレッドの部分がうまく動いてくれません。プログラムは下のものなのですがどこがいけないのでしょうか。教えてください。
import javax.swing.*;
import java.awt.*;
public class SampleBall extends JFrame implements Runnable{
SmapleCanvas samplecanvas;
Image image=null;
Graphics offg=null;
int x1,y1=60;
public SampleBall(){
super("Ball");
setSize(500,360);
setDefaultCloseOperation(EXIT_ON_CLOSE);
samplecanvas=new SmapleCanvas();
samplecanvas.setBounds(0,0,500,360);
getContentPane().add(samplecanvas);
}
public static void main(String args[]){
new SampleBall().show();
Thread b1=new Thread();
b1.start();
}
public void run(){
try{
x1=40;
while(true){
x1=x1+10;
if(x1>=500){
x1=10;
}
samplecanvas.repaint();
}
}catch(Exception e){
System.out.println(e);
}
}
class SmapleCanvas extends Canvas{
public void paint(Graphics g){
if(image==null){
image=createImage(500,360);
offg=image.getGraphics();
offg.setColor(Color.white);
offg.fillRect(0,0,500,360);
}
else{
offg.setColor(Color.white);
offg.fillRect(0,0,500,360);
g.drawImage(image,0,0,this);
}
offg.setColor(Color.blue);
offg.fillOval(x1,y1,10,10);
g.drawImage(image,0,0,this);
}
}
}
No.1ベストアンサー
- 回答日時:
shuncillinさん、こんにちは。
mainメソッドでスレッドを生成してstartしていますが、SampleBallのスレッドをスタートすることように設定していません。
以下のようにすれば、とりあえず動作します。
SampleBall s = null;
Thread b1 = null;
s = new SampleBall();
b1 = new Thread(s);
b1.start();
s.show();
画面のちらつきが残りますが、とりあえず。
ありがとうございます。画面はちらつきますができました。ちらつきは、ダブルバッファリングを使えばいいと本に書いてありダブルバッファリングを使ったのですが、なぜこんなにちらつくのでしょうか。聞いてばかりで悪いのですが、教えてもらえるとうれしいです。
No.2
- 回答日時:
shuncillinさん、ダブルバッファリングはできたものとして回答します。
ちらつきは言ってしまえば、画面への(再)描画はものすごく時間のかかる処理のために発声します。。
ディスプレイの能力以上、全体を描画し直しながら表示、全体を描画し直しながら表示と命令が入り、描ききれないうちに次の状態ということを繰り返すためにちらつくのです。
そこで、こんな状態を防ぐには、
再描画する範囲を小さくするというのがありますが、これはなかなか難しいですね。
そこで、あらかじめ描画する内容を決めてあげて、それを表示とディスプレイの負担を表示だけにすれば、ちらつきは軽減できます。これがダブルバッファリングですね。
より詳しく知りたければ、検索サイトで「java ダブルバッファリング」をキーに検索すれば、有意義な情報を拾えるでしょう。
参考URL:http://www.google.com/search?q=%E3%83%80%E3%83%9 …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- その他(プログラミング・Web制作) Pythonにおける物理のシミュレーションでの単位変換について 2 2023/06/02 17:11
- C言語・C++・C# 大量のデータを読み込んで表示する速度を改善したい 8 2023/05/07 13:29
- Java java final 1 2022/06/10 22:49
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Javaからパイプでデータ送信しG...
-
VB.NET フォーム上に描いたグ...
-
iアプリで休眠モードになるとき...
-
JavaScript でスライダーを作る...
-
SwingがOSに依存しない理由
-
Excelで =EMBED("Acrobat Docu...
-
C# 継承の問題で programに示さ...
-
SQLです教えてくださいお願いし...
-
パワーポイントのVBAでテキスト...
-
JSPでのArrayListの表示につい...
-
複数の変数を宣言する時、同時...
-
VBPをダブルクリックするとたま...
-
3年間同じクラスになる確率
-
同一パッケージにあるクラスが...
-
エクセルVBAで、条件に一致する...
-
成人式の後中3のクラスで集まろ...
-
変数名の付け方
-
インスタンス参照でアクセスで...
-
「タイプ初期化子が例外をスロ...
-
(vba)他のアプリケーションの右...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB.NET フォーム上に描いたグ...
-
VB.NETのSendMessageを教えてく...
-
JAVAでの背景画像表示
-
C# DataGridView のCellPaintin...
-
C# リストビューの特定のセルの...
-
重なった要素上でのイベントで...
-
画面のちらつきの原因が知りた...
-
Androidで画像の中で指定した範...
-
複数画像表示切り替え Visual c++
-
Labelコントロールの背景をグラ...
-
VS Treeview のデザイン変更
-
描画処理が実行されない
-
GDI+で描画した画像を消去する...
-
canvasで表示されてる画像を1...
-
このプログラミングをどう組み...
-
ドラッグして矩形を描くには
-
getGraphics()の意味を教えて...
-
DirectXのスプライト機能で3D回転
-
Canvas等の図形を移動する時,直...
-
Exception occurred during eve...
おすすめ情報