0

新しいスレッドで実行される短い Java アニメーションを作成しました。アニメーションはキャンバスに描画されます。100ms ごとに更新されます。いくつかのティックでは、長方形が表示されません。

package com.felix.pack;

import java.awt.Canvas;
import java.awt.Dimension;
import java.awt.Graphics;

import javax.swing.JFrame;

public class Draw extends Canvas implements Runnable {

    Thread x;
    int xpos = 0;
    int ypos = 0;
    JFrame window;
    boolean runs = false;
    Graphics g;

    public Draw() {
        doWindow();
        setPreferredSize(new Dimension(500,500));
        window.add(this);
    }

    @Override
    public void run() {

        g = getGraphics();
        while (runs) {
            paint(g);
            try {
                Thread.sleep(100);
                xpos +=1;
                ypos +=1;
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                System.out.println("Fail");
                stop();
            }
        }

    }

    private void doWindow(){
        window = new JFrame();
        window.setSize(500, 500);
        window.setTitle("Hey");
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.setVisible(true);
    }

    public void start() {

        if (runs == false) {
            runs = true;
        x = new Thread(this);
        x.start();

        } else {
            System.out.println("Thread läuft bereits");
        }
    }

    public void stop() {
        runs = false;
        try {
            x.join();
            System.out.println("Thread erfolgreich geschlossen");
        } catch(Exception e) {
            System.out.println("Closing thread didnt work");
        }
    }

    public void paint(Graphics g){
        g.clearRect(0, 0, 500, 500);
        g.fillRect(xpos, ypos, 400, 400);
    }

}

私のメイン クラスでは、このクラスに含まれるメソッド start を開始します。(私が思うに) 確認する必要がある部分は、run() メソッドと paint メソッドです。他のものは、スレッドを安全に開始および停止できるようにするためのものです。

https://www.youtube.com/watch?v=pAFng8mOcOQ

これがビデオです。皆さんが私を助けてくれることを願っています。それがばかげた質問であれば申し訳ありません:)

4

1 に答える 1

0

一部の目盛りでは、長方形が表示されません

あなたのコードをダウンロードして実行しましたが、あなたが説明したちらつきが見られないため、システムの制限である可能性があります。この投稿は、あなたが見ている問題に対処しているようですが、ペイントの速度はさらに高速です

ビデオで見られる長引く暗い灰色については、それはあなたのpaint()方法によるものです. g.clearRect(0, 0, 500, 500)ウィンドウのサイズが変化しても、常に呼び出しているだけであることに注意してください。代わりに、g.clearRect(0, 0, window.getWidth(), window.getHeight())ウィンドウのサイズが変わると、クリアする領域も変わるようにしてください。

于 2016-06-01T19:57:09.053 に答える