Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java多线程与GUI(一种流量模拟器)_Java_Multithreading_User Interface - Fatal编程技术网

Java多线程与GUI(一种流量模拟器)

Java多线程与GUI(一种流量模拟器),java,multithreading,user-interface,Java,Multithreading,User Interface,我需要为一个狭窄的桥实现一个解决方案,而且我对java线程和gui是新手。 我有三条路和一座桥(有两条车道)。每条路应该随机创建20辆车,并且应该根据其道路上的灯光通过桥 但首先,我只想解决一个简单的问题,那就是如何用线程在这条路上移动汽车?(睡眠1秒,移动一点)。 我是这样想的: 我已经用简单的PaintComponent函数覆盖创建了道路(我不确定它是否也会这样实现)。 创建了实现runnable的road类和vehicle类。 我创建了一个由20辆道路级车辆组成的阵列,并卡在了这里 我应该

我需要为一个狭窄的桥实现一个解决方案,而且我对java线程和gui是新手。 我有三条路和一座桥(有两条车道)。每条路应该随机创建20辆车,并且应该根据其道路上的灯光通过桥

但首先,我只想解决一个简单的问题,那就是如何用线程在这条路上移动汽车?(睡眠1秒,移动一点)。

我是这样想的: 我已经用简单的PaintComponent函数覆盖创建了道路(我不确定它是否也会这样实现)。 创建了实现runnable的road类和vehicle类。 我创建了一个由20辆道路级车辆组成的阵列,并卡在了这里

我应该如何将其添加到JPanel并每1秒将其向右移动? 因为我有C家族的背景,所以我在如何实现这个问题上完全错了吗

我的代码:

公共级窄桥{

public static void main(String[] args) {



    JFrame myFrame = new JFrame();
    PanelSetter newPanel = new PanelSetter();
    myFrame.add(newPanel);
    myFrame.setDefaultCloseOperation(EXIT_ON_CLOSE);
    myFrame.setSize(600, 600);
    myFrame.setTitle("Narrow Bridge Problem ");

    myFrame.setLocationRelativeTo(null);//To centralize the jframe.
    myFrame.setVisible(true);

}
}

类PanelSetter扩展了JPanel{

public Road Road1 = new Road(true);
public Road Road2 = new Road(false);
public Road Road3 = new Road(false);

@Override
public void paintComponent(Graphics g) {
    super.paintComponent(g);


    //Fixed Roads Drawing.
    g.setColor(Color.BLACK);
    g.drawLine(50, 100, 200, 100);
    g.drawLine(50, 130, 200, 130);

    g.setColor(Color.BLACK);
    g.drawLine(50, 210, 200, 210);
    g.drawLine(50, 240, 200, 240);

    g.setColor(Color.BLACK);
    g.drawLine(50, 320, 200, 320);
    g.drawLine(50, 350, 200, 350);


    //Road 1 Light.
    if (Road1.getLight()) {

        g.setColor(Color.GREEN);
        g.fillOval(180, 70, 20, 20);

    } else {
        g.setColor(Color.RED);
        g.fillOval(180, 70, 20, 20);

    }
    //Road 2 Light.
    if (Road2.getLight()) {
        g.setColor(Color.GREEN);
        g.fillOval(180, 180, 20, 20);

    } else {
        g.setColor(Color.RED);
        g.fillOval(180, 180, 20, 20);

    }
    //Road 3 Light. 
    if (Road3.getLight()) {
        g.setColor(Color.GREEN);
        g.fillOval(180, 290, 20, 20);

    } else {
        g.setColor(Color.RED);
        g.fillOval(180, 290, 20, 20);

    }

}
}


Road只是一个简单的类,它只有布尔光,我尝试的是vehicle[]vehicles=new vehicle[20]。

最后我在Java小程序的帮助下解决了我的问题。
我可以将小程序作为参数传递,并调用它的paint()函数和更新屏幕

这里的路是什么?粘贴你的class@Shriram我添加了它的内容,但它只不过是一个标准的基本类。谢谢你的帮助。嗨,你能分享一下代码吗?嗨@Steven94,我很久以前就写过了,所以很难理解。但是试试看。在这里: