Я хочу запустить бесконечный цикл в моем классе Caller с помощью кнопки «Пуск», а также остановить его с помощью кнопки «Стоп» из моего класса GUI.Моя проблема в том, что мне нужен новый поток для бесконечного цикла.И я не знаю, как я мог бы реализовать это в своем коде.Пожалуйста, дайте мне несколько советов экспертов.Я надеюсь, что ясно, что я хочу знать и в чем моя проблема.
Мой класс GUI:
public class GUI implements ActionListener {
JFrame frame;
JPanel panel;
JButton numberBtn;
JLabel actNumberLabel;
JLabel entryNumber;
JButton startBtn;
JButton stopBtn;
static GUI ui;
private boolean run = false;
private String adminTelNumber = "006123456";
private JTextField textEntryNumber;
public GUI() {
frame = new JFrame("Caller GUI");
frame.getContentPane().setLayout(null);
frame.setPreferredSize(new Dimension(400,300));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel_1 = new JPanel();
panel_1.setBounds(0, 0, 434, 70);
frame.getContentPane().add(panel_1);
panel_1.setLayout(null);
startBtn = new JButton("Start");
startBtn.setBounds(274, 11, 89, 23);
startBtn.addActionListener(this);
panel_1.add(startBtn);
stopBtn = new JButton("Stop");
stopBtn.setBounds(274, 36, 89, 23);
stopBtn.addActionListener(this);
panel_1.add(stopBtn);
JPanel panel_2 = new JPanel();
panel_2.setBounds(0, 70, 434, 120);
frame.getContentPane().add(panel_2);
panel_2.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
JPanel panel_3 = new JPanel();
panel_3.setBounds(0, 190, 434, 71);
frame.getContentPane().add(panel_3);
panel_3.setLayout(null);
JLabel entryNumber = new JLabel("Telefonnummer eingeben:");
entryNumber.setBounds(10, 11, 183, 14);
panel_3.add(entryNumber);
textEntryNumber = new JTextField();
textEntryNumber.setBounds(10, 25, 112, 20);
panel_3.add(textEntryNumber);
textEntryNumber.setColumns(10);
numberBtn = new JButton("Übernehmen");
numberBtn.setBounds(132, 24, 107, 23);
numberBtn.addActionListener(this);
panel_3.add(numberBtn);
actNumberLabel = new JLabel("Derzeitige Signalisierung auf: " + adminTelNumber);
actNumberLabel.setBounds(10, 46, 369, 14);
panel_3.add(actNumberLabel);
frame.pack();
frame.setVisible(true);
}
@Override
public synchronized void actionPerformed(ActionEvent e) {
if(e.getSource() == numberBtn){
adminTelNumber = textEntryNumber.getText();
actNumberLabel.setText("Derzeitige Signalisierung auf: " + adminTelNumber);
textEntryNumber.setText("");
}
if(e.getSource() == startBtn) {
run = true;
Caller.call(ui, 90000, 45);
}
if(e.getSource() == stopBtn) {
run = false;
}
}
public synchronized String getAdminTelNumber() {
return adminTelNumber;
}
public synchronized boolean getRun() {
return run;
}
public static void main(String[] args) {
try {
ui = new GUI();
} catch (Exception e) {
e.printStackTrace();
}
}
}
И мой класс бесконечных циклов:
public class Caller {
static String number = null;
public static void call(GUI ui, int sleepTime, int standardLeadTime) {
ArrayList<Integer> alarmTaskIdList = new ArrayList<Integer>();
ArrayList<Integer> doneTasksList = new ArrayList<Integer>();
ArrayList<Integer> doneAlarmTasksList = new ArrayList<Integer>();
ArrayList<Integer> taskIdList = new ArrayList<Integer>();
while (ui.getRun()) {
doneTasksList = wakeUpCall(taskIdList, doneTasksList, standardLeadTime);
doneAlarmTasksList = alarmCall(alarmTaskIdList, doneAlarmTasksList, ui);
try {
Thread.sleep(sleepTime);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}