【发布时间】:2018-05-11 12:40:02
【问题描述】:
我想用开始按钮在我的 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();
}
}
}
【问题讨论】:
-
This tutorial 可能会有所帮助。
标签: java multithreading swing user-interface