2

私はプログラミングが初めてで (私は 11 歳で、Java コーディングが私のキャリアになることを望んでいますが、今は単なる趣味です :)) カウントダウン プログラムを作成しました。クラスは次のとおりです。

package me.NoahCagle.JAVA;

import javax.swing.JFrame;

public class Main extends JFrame implements Runnable {
private static final long serialVersionUID = 1L;
public static int width = 600;
public static int height = 500;
public static String title = "Countdown!";
public static boolean running = false;
public int number = 11;
public Thread thread;
Dimension size = new Dimension(width, height);

public Main() {
    super(title);
    setSize(size);
    setResizable(false);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setLocationRelativeTo(null);
    setVisible(true);
}

public static void main(String[] args) {
    Main m = new Main();
    m.start();
}

public void start() {
    if (running) {
        return;
    }

    running = true;
    Thread thread = new Thread(this);
    thread.start();

}

@SuppressWarnings("static-access")
public void run() {
    while (running) {
        number--;
        if (number == -1) {
            System.out.println("Done!");
            System.exit(0);
        }
        try {
        thread.sleep(1000);
        }catch (Exception e) {
            e.printStackTrace();
            System.exit(0);
        }
        System.out.println("" + number);
    }
}

public void stop() {
    if (!running) {
        return;
    }

    running = false;
    try {
        thread.join();
    }catch (Exception e) {
        e.printStackTrace();
        System.exit(0);
        }
    }
}

それは必要ではなかったかもしれませんが、何でも。私が言ったように、コードを読むと、値がコンソールに出力されることに気付くでしょう。まあ、それを同時に更新しながらJLabelに表示させることができれば。私は setText("" + number) を実行しようとしましたが、スレッドが進行しているため、再描画されると考えています。しかし、そうはなりませんでした。ちょうど 11 で止まっていました。誰か助けてくれませんか? ありがとう

4

2 に答える 2

4

最初に、 Swing での同時実行を読みたいと思うかもしれません。複数のスレッドと Swing を扱う場合、いくつかの非常に重要な制約があります。

あなたの問題については、実際に を使用する必要がjavax.swing.Timerあり、例を挙げて...

于 2013-07-25T07:37:14.693 に答える
-1

11 歳のあなたは、ここでよく働きました。しかし、番号を表示したいフレームのどこにパネルを追加しましたか? それを行って番号を追加するためにラベルを付けたら、repaint メソッドを呼び出す必要があります。また、Swing でスレッドを使用するには、Timer のような多くのライブラリを使用できます。

ハッピーコーディング!

于 2013-07-25T07:41:20.523 に答える