Java 线程中无限循环的最佳替代品

Java 线程中无限循环的最佳替代品,java,swing,coding-style,Java,Swing,Coding Style,我是Java GUI开发新手,因此遇到了以下问题: 在我的图形2D绘制的自定义组件中,我正在制作一个闪烁的动画。为此,我创建了一个Java线程,它正在更改一个变量并定期调用repaint()方法 我知道创建无止境循环被认为是一种糟糕的编程风格,那么您知道一种更好的替代方法,或者更好的方法,可以使用Graphics2D制作简单动画,而不需要定制线程吗 代码 环 从paintComponent中提取: 用秋千。这个网站上应该有很多例子。“我知道创建无止境循环被认为是糟糕的编程风格……”——我不确定我

我是Java GUI开发新手,因此遇到了以下问题:

在我的
图形2D
绘制的自定义组件中,我正在制作一个闪烁的动画。为此,我创建了一个Java线程,它正在更改一个变量并定期调用repaint()方法

我知道创建无止境循环被认为是一种糟糕的编程风格,那么您知道一种更好的替代方法,或者更好的方法,可以使用
Graphics2D
制作简单动画,而不需要定制线程吗

代码 环 从
paintComponent
中提取:
用秋千。这个网站上应该有很多例子。
“我知道创建无止境循环被认为是糟糕的编程风格……”
——我不确定我是否会这样概括。你能发布一个支持这个的推荐信吗?非常感谢kiheru@气垫船我的教科书建议我永远不要使用无休止的循环,因为我还是一个初学者,所以我尽量遵守我的书。我相信计时器在其自身的背景代码中会使用类似的循环,但它确实提供了很好的方法来帮助您以比当前代码更干净的方式控制其功能。
new Thread(new Runnable() {
        @Override
        public void run() {
            while (true) {
                try {
                    blinkState = true;
                    FeldPanel.this.repaint();
                    Thread.sleep(1000);
                    blinkState = false;
                    FeldPanel.this.repaint();
                    Thread.sleep(500);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }).start();
if (highlightedField != null && blinkState) {
        g.setColor(Color.YELLOW);
        g.fillRect(highlightedField.getX() * 33, highlightedField.getY() * 33, 33, 33);
    }