Это - реализация, которую я сделал для параллельного приложения через дорогу с графическим интерфейсом пользователя, но после запуска приложения какое-то время происходит коллизия, и я не могу реально разобраться с реальной проблемой, пожалуйста, простите за плохое сокращение.Я новичок здесь, и я ценю любую поддержку
Класс моего окна:
package com.example.trafic;
import javax.swing.*;
public class Window extends JFrame {
View view = new View();
public Window(){
this.setTitle("Trafic App");
this.setSize(720, 450);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setContentPane(view);
this.setResizable(false);
this.setVisible(true);
}
}
Класс моего просмотра:
package com.example.trafic;
import javax.swing.*;
import java.awt.*;
public class View extends JPanel {
//private Thread t;
// DIMENSION
public int width = 720;
public int height = 420;
public int route_width = 100;
public int lamp_width = 30;
public int car_width = 60;
public int car_height = 70;
public int positionV = 0;
public int positionH = 0;
public int feu = 1;
@Override
public void paintComponent(Graphics g2) {
// TEXTTURE
g2.setColor(Color.DARK_GRAY);
g2.fillRect(0, 0, width, height);
// ROUTE
g2.setColor(Color.LIGHT_GRAY);
g2.fillRect( width / 2 - route_width / 2, 0, route_width, 420);
g2.fillRect(0, height / 2 - route_width / 2, 720, route_width);
// LAMPE
g2.setColor((feu == 1 ) ? Color.RED : Color.GREEN );
g2.fillOval(width / 2 - route_width, height / 2 - route_width, lamp_width, lamp_width);
g2.setColor((feu == 2 ) ? Color.RED : Color.GREEN);
g2.fillOval(width / 2 + route_width - 30, height / 2 - route_width , lamp_width, lamp_width);
ImageIcon ia = new ImageIcon(View.class.getResource("/images/carh.png"));
Image carH = ia.getImage();
ImageIcon ib = new ImageIcon(View.class.getResource("/images/carv.png"));
Image carV = ib.getImage();
g2.drawImage(carH, 10 + width / 2 - car_width / 2, 10 + positionH, this);
g2.drawImage(carV, 720 - positionV, 10 + height / 2 - car_height / 2, this);
}
public void setLight(int feu){
this.feu = feu;
this.repaint();
}
public void setCarV(int i){
this.positionV = i;
this.repaint();
}
public void setCarH(int i) {
this.positionH = i;
this.repaint();
}
}
Класс моего задания:
package com.example.trafic;
public class Task implements Runnable {
Window frame;
static int Feu = 1;
public Task(Window frame) {
this.frame = frame;
}
public void run() {
while (true) {
try {
Thread.sleep(4000);
if (Feu == 1) {
Feu = 2;
System.out.println("Feu 2 ON");
} else {
Feu = 1;
System.out.println("Feu 1 ON");
}
frame.view.setLight(Feu);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
Мой класс бега:
package com.example.trafic;
public class Run implements Runnable {
View view;
public Run(View view) {
this.view = view;
}
public void run() {
while (Task.Feu == 2) {
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
while(true){
int i = 0 ;
int l = (Task.Feu == 1) ? 720 : 450;
for (int j = 0; j < l; j++) {
try {
Thread.sleep(2);
if ((Task.Feu == 1)) {
view.setCarV(++i);
} else {
view.setCarH(++i);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
Основной класс моего приложения:
package com.example.trafic;
public class App {
public static void main(String[] args) throws InterruptedException {
Window frame = new Window();
new Thread(new Task(frame)).start();
new Thread(new Run(frame.view)).start();
}
}