ボールを左から右に動かすようなプログラムを組んだのですがスレッドの部分がうまく動いてくれません。プログラムは下のものなのですがどこがいけないのでしょうか。教えてください。
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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
株価チャートソフトを作るのに
-
VB.NETのSendMessageを教えてく...
-
Java、jPanelに描画する
-
Javascriptのチャートライブラ...
-
VB.NET フォーム上に描いたグ...
-
複数画像表示切り替え Visual c++
-
C# リストビューの特定のセルの...
-
共有お絵かきシステムの同期の...
-
JAVAでの背景画像表示
-
「タイプ初期化子が例外をスロ...
-
エクセルVBAで、条件に一致する...
-
変数名の付け方
-
private static という変数の修飾
-
UMLのクラス図はmain()も含むん...
-
インスタンス参照でアクセスで...
-
Java初級 引数に適用できません
-
オブジェクト参照がオブジェク...
-
VB.NET getとsetの概念がわかり...
-
C# インスタンスの破棄
-
javascriptからjavaを呼び出したい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C# リストビューの特定のセルの...
-
VB.NETのSendMessageを教えてく...
-
C# DataGridView のCellPaintin...
-
PDF帳票を作成するためのフリー...
-
JAVAでの背景画像表示
-
VB.NET フォーム上に描いたグ...
-
SwingとEDT(イベントディスパッ...
-
アクセスで他アプリから復帰し...
-
Labelコントロールの背景をグラ...
-
Androidのフォントサイズ(SP)と...
-
画面のちらつきの原因が知りた...
-
Canvas等の図形を移動する時,直...
-
複数画像表示切り替え Visual c++
-
javaでクイズ
-
Androidで画像の中で指定した範...
-
C#のGraphicsクラスについてです。
-
C# テキストボックスについて
-
描画してもウィンドウをリサイ...
-
VS Treeview のデザイン変更
-
GDI+で描画した画像を消去する...
おすすめ情報