, поэтому я проектирую GUI (сам GUI находится в отдельном классе, называемом main GUI). GUI имеет 2 кнопки, каждая из которых устанавливает main.subProgramNumber на 1 или 2 (в зависимости от кнопки), устанавливает main.safeToContinue в false, а затем удаляет GUI с помощью dispose (). но когда я нажимаю кнопку в GUI, GUI закрывается, тогда ничего не происходит. Я прошел через отладчик, и странно, код работает по-разному, используя инструмент отладки. при использовании инструмента отладки GUI остается открытым после нажатия кнопки и загрузки навсегда. Любая помощь будет приветствоваться.
genData main = new genData();
main.safeToContinue = false;
main.running = true;
while(main.running == true){
//trigger GUI
mainGUI MG = new mainGUI();
MG.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
MG.setSize(250, 275);
MG.setVisible(true);
//wait tell the GUI says its safe to continue
while(main.safeToContinue == false){
try {
TimeUnit.MILLISECONDS.sleep(1);
} catch (InterruptedException ex) {
Logger.getLogger(mainGUI.class.getName()).log(Level.SEVERE, null, ex);
}
}
//check if main.subProgram is 1
if(main.subProgramNumber == 1){
System.out.println("subProgram = 1");
}
//check if main.subProgram is 2
if(main.subProgramNumber == 2){
System.out.println("subProgram = 2");
}
}
ниже - это упрощенная версия моего GUI кода. (извините, это своего рода много кода, но я не мог понять, как сделать его проще, чем этот ...) * использовал (и использую выше)
основную программу (она вызывается при нажатии кнопки «Пуск»):
varData MC = new varData();
do{
MC.safeToContinue = false;
//open and run the main GUI
ExerciseMainGUI EM = new ExerciseMainGUI();
EM.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
EM.setSize(250, 275);
EM.setVisible(true);
//System.out.println("debug 1");
//wait tell the sub program closes to continue
do{
hutLib.pause(1);
}while(MC.safeToContinue==false);
hutLib.pause(1);
}while(MC.running == true);
GUI, который я вызываю выше:
public class ExerciseMainGUI extends JFrame{
private JButton bottlePacker;
private JButton triangleTester;
private JButton primeChecker;
private JButton averager;
private JButton rollTheDice;
private JButton close;
public ExerciseMainGUI(){
super("Java Exercises");
setLayout(new FlowLayout());
bottlePacker = new JButton(" Bottle Packer ");
triangleTester = new JButton(" Triangle Tester ");
primeChecker = new JButton(" Prime Checker ");
averager = new JButton ("Averager (offline)");
rollTheDice = new JButton("Roll the Dice (offline)");
close = new JButton(" Close ");
add(bottlePacker);
add(triangleTester);
add(primeChecker);
add(averager);
add(rollTheDice);
add(close);
bottlePacker bp = new bottlePacker();
bottlePacker.addActionListener(bp);
triangleTester tt = new triangleTester();
triangleTester.addActionListener(tt);
primeChecker pc = new primeChecker();
primeChecker.addActionListener(pc);
averager a = new averager();
averager.addActionListener(a);
rollTheDice rtd = new rollTheDice();
rollTheDice.addActionListener(rtd);
close c = new close();
close.addActionListener(c);
}
private class bottlePacker implements ActionListener{
public void actionPerformed(ActionEvent e){
dispose();
//runs a subprogram
}
}
private class triangleTester implements ActionListener{
public void actionPerformed(ActionEvent e){
dispose();
//runs a subprogram
}
}
private class primeChecker implements ActionListener{
public void actionPerformed(ActionEvent e){
dispose();
//runs a subprogram
}
}
private class averager implements ActionListener{
public void actionPerformed(ActionEvent e){
dispose();
//runs a subprogram
}
}
private class rollTheDice implements ActionListener{
public void actionPerformed(ActionEvent e){
dispose();
//runs a subprogram
//JOptionPane.showMessageDialog(null, "NOTE: Roll the Dice will run in the command line.");
//oldCodeStorage.rollTheDice.rollTheDice();
}
}
private class close implements ActionListener{
public void actionPerformed(ActionEvent e){
dispose();
varData MC = new varData();
MC.running = false;
MC.safeToContinue = true;
}
}
}
ПРИМЕЧАНИЕ: когда каждая подпрограмма завершена, она запускает следующий код:
varData MC = new varData();
MC.safeToContinue = true;
Я знаю, что это много, но меня явно попросили опубликовать.