Java 是什么导致绿灯保持绿色?

Java 是什么导致绿灯保持绿色?,java,swing,graphics,jframe,awt,Java,Swing,Graphics,Jframe,Awt,对不起,这个愚蠢的问题是我的作业。我应该做一个交通灯,当按下按钮时,它会改变灯的颜色。我让它半工作,我遇到的问题是绿灯在红灯阶段一直亮着。我对所有三个阶段都做了同样的事情,所以我不明白为什么它只有一个阶段有问题。 代码: 如果您想编译它,这里是框架和主要方法部分: import javax.swing.JFrame; public class TrafficFrame { public static void main(String[] args) { JFrame frame= ne

对不起,这个愚蠢的问题是我的作业。我应该做一个交通灯,当按下按钮时,它会改变灯的颜色。我让它半工作,我遇到的问题是绿灯在红灯阶段一直亮着。我对所有三个阶段都做了同样的事情,所以我不明白为什么它只有一个阶段有问题。 代码:

如果您想编译它,这里是框架和主要方法部分:

import javax.swing.JFrame;
public class TrafficFrame {

public static void main(String[] args) {
    JFrame frame= new JFrame("Traffic Light");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    ButtonPanel panel=new ButtonPanel();
    frame.getContentPane().add(panel);

    frame.pack();
    frame.setVisible(true);

}

}

在我看来,这是个简单的打字错误。在该if块中,您设置了两次
empty1
,而没有设置
empty2

在我看来就像一个简单的打字错误。在该if块中,您设置了两次
empty1
,而没有设置
empty2

我运行了你的项目,但找不到你的错误。每次我重复单击面板中的按钮,它都会正确地循环显示所有颜色。事实上,其他人的行为有所不同,这表明您可能需要将
main
方法的内容移动到Runnable中,并将该Runnable传递给。这是必要的,因为不允许在主线程或事件调度线程以外的任何线程中调用Swing方法和构造函数;看,你试过在调试器下运行它吗?这通常会捕获我所犯的任何错误。@VGR-这不是并发或事件调度线程问题-有相当好的代码将对象模型与绘制周期分离。这只是更新模型的逻辑中的一个小错误-请参阅下面我的答案。@Krease我重复一遍:除了事件分派线程之外,任何线程都不允许调用Swing方法和构造函数。违反此规则会导致不可预知的行为。我运行了您的项目,但找不到您的错误。每次我重复单击面板中的按钮,它都会正确地循环显示所有颜色。事实上,其他人的行为有所不同,这表明您可能需要将
main
方法的内容移动到Runnable中,并将该Runnable传递给。这是必要的,因为不允许在主线程或事件调度线程以外的任何线程中调用Swing方法和构造函数;看,你试过在调试器下运行它吗?这通常会捕获我所犯的任何错误。@VGR-这不是并发或事件调度线程问题-有相当好的代码将对象模型与绘制周期分离。这只是更新模型的逻辑中的一个小错误-请参阅下面我的答案。@Krease我重复一遍:除了事件分派线程之外,任何线程都不允许调用Swing方法和构造函数。违反此规则会导致不可预测的行为。
import javax.swing.JFrame;
public class TrafficFrame {

public static void main(String[] args) {
    JFrame frame= new JFrame("Traffic Light");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    ButtonPanel panel=new ButtonPanel();
    frame.getContentPane().add(panel);

    frame.pack();
    frame.setVisible(true);

}

}