ボールを左から右に動かすようなプログラムを組んだのですがスレッドの部分がうまく動いてくれません。プログラムは下のものなのですがどこがいけないのでしょうか。教えてください。
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ランキング
-
VB.NET フォーム上に描いたグ...
-
描画処理が実行されない
-
GDI+で描画した画像を消去する...
-
SwingのpaintComponent(...
-
BMP画像を画像処理して連続に表...
-
canvasで表示されてる画像を1...
-
Java 15パズルを作ったのですが...
-
JavaScriptで直線を描画したい
-
Java、jPanelに描画する
-
VB.NETのSendMessageを教えてく...
-
エクセルVBAで、条件に一致する...
-
3年間同じクラスになる確率
-
インスタンス参照でアクセスで...
-
c++,ある関数のクラスから別の...
-
ワイルドカード<?>と型パラメー...
-
「天声人語」をインターネット...
-
DataGridViewでセルクリックイ...
-
string formatについて
-
クラス間でのデータ参照
-
変数の参照でエラーが出てしま...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB.NET フォーム上に描いたグ...
-
VB.NETのSendMessageを教えてく...
-
JAVAでの背景画像表示
-
C# DataGridView のCellPaintin...
-
重なった要素上でのイベントで...
-
C# リストビューの特定のセルの...
-
Androidで画像の中で指定した範...
-
画面のちらつきの原因が知りた...
-
複数画像表示切り替え Visual c++
-
Labelコントロールの背景をグラ...
-
VS Treeview のデザイン変更
-
描画処理が実行されない
-
GDI+で描画した画像を消去する...
-
このプログラミングをどう組み...
-
canvasで表示されてる画像を1...
-
ドラッグして矩形を描くには
-
getGraphics()の意味を教えて...
-
Canvas等の図形を移動する時,直...
-
DirectXのスプライト機能で3D回転
-
Exception occurred during eve...
おすすめ情報