gpt4 book ai didi

java - 防止 4 路路口的汽车在 Java 中崩溃

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:28:36 24 4
gpt4 key购买 nike

我制作了一个 4 路连接的 Java 应用程序。我可以使用 THread.sleep() 将所有汽车移过路口,但我需要让汽车不会相互碰撞。 (见图)

alt text

我应该使用什么?

  • 同步

  • wait()/notify()/notifyAll()

  • 线程面板

  • Canvas(顺便说一句,什么是 Canvas 及其用途?)

我使用 layeredPane 将图像放在彼此之上。

这是我的代码:

import javax.swing.ImageIcon;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JLayeredPane;

import javax.swing.JPanel;

public class Gui {

private JFrame f = new JFrame("Traffic Light");
private JLayeredPane lp = new JLayeredPane();
private JPanel red = new JPanel();
private JPanel car_1 = new JPanel();
private ImageIcon northcar = new ImageIcon("src/north.gif");
private ImageIcon usIcon = new ImageIcon("src/trafficLight.jpg");
private JLabel lb = new JLabel(usIcon);
private JLabel lbcar_1 = new JLabel(northcar);


/*private ImageIcon southcar = new ImageIcon("src/trafficLight.jpg");
private ImageIcon westcar = new ImageIcon("src/trafficLight.jpg");
private ImageIcon eastcar = new ImageIcon("src/trafficLight.jpg");
*/
public Gui() {

f.setBounds(0, 0, 655, 679);
f.add(lp);




car_1.setOpaque(false);
car_1.setBounds(340, 120, 70, 105);
//car_1.setBackground(Color.black);
car_1.add(lbcar_1);




red.setBounds(0, -5, 650, 650);
red.add(lb);



lp.add(red, new Integer(0));
lp.add(car_1, new Integer(1));


f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

try {
for (int i = 120; i < 540; i +=1){
Thread.sleep(10);
car_1.setBounds(340, i, 70, 105);

} }catch (Exception e) {
}


}

public static void main(String[] args) {


Gui frame = new Gui();






}
}

感谢任何帮助。感谢您的宝贵时间。

非常感谢

最佳答案

您可以认为有 4 个共享资源需要同步访问:“交界处”的四个角。过马路时,每辆车必须首先进入离它们最近的拐角,然后进入下一个拐角。

但是,如果您分别锁定每个角落,由于 Dining Philosopher's Problem,您可能会陷入死锁(在您的示例中相当于并发性死锁) .当所有四辆车都进入(“锁定”)最近的广场时,就会发生这种情况,并且它们都在等待下一辆顺时针方向的汽车通过第二个广场。请参阅该链接以获取解决方案。

将交集视为四种资源当然只是一种解决方案。您还可以考虑按照建议将整个交叉路口视为一种资源(类似于全路 parking ,但不完全是),尽管这也不能很好地反射(reflect)实际交通流量。您还可以为镜像交通信号灯的四个角建立同步规则。

关于java - 防止 4 路路口的汽车在 Java 中崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3074413/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com