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 岁时,你在这里做得很好。但是你在哪里添加任何面板到你想显示数字的框架上?一旦你这样做并放置一些标签来添加你需要调用重绘方法的数字。还要使用带摆动的线程,您可以使用许多库,例如 Timer。

快乐编码!

于 2013-07-25T07:41:20.523 回答