Próbuję na takim prostym przykładzie.
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.text.DefaultCaret;
public class Test implements ActionListener
{
JFrame ramka;
JTextArea notatnik;
JMenuBar menuBar;
JMenu menuUstawienia;
JCheckBox chZatrzymajDzialanieProgramu;
boolean programJestWstrzymany;
Petla petla;
public static void main(String[] args) throws InterruptedException
{
Test test = new Test();
test.zbudujGUI();
test.dzialaj();
}
public void zbudujGUI() throws InterruptedException
{
ramka = new JFrame();
ramka.setSize(1000,500);
ramka.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ramka.setExtendedState(JFrame.MAXIMIZED_BOTH);
ramka.setLayout(null);
notatnik = new JTextArea();
JScrollPane przewijalnePole = new JScrollPane(notatnik);
przewijalnePole.setBounds(420,20,500,790);
DefaultCaret caret = (DefaultCaret)notatnik.getCaret();
caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
ramka.add(przewijalnePole);
menuBar = new JMenuBar();
ramka.setJMenuBar(menuBar);
menuUstawienia = new JMenu("Ustawienia");
menuBar.add(menuUstawienia);
chZatrzymajDzialanieProgramu = new JCheckBox("Zatrzymaj działanie programu");
menuUstawienia.add(chZatrzymajDzialanieProgramu);
chZatrzymajDzialanieProgramu.addActionListener(this);
ramka.setVisible(true);
return;
}
public void dzialaj()
{
programJestWstrzymany = false;
petla = new Petla(this);
for (int i=0; i<10000; i++)
{
notatnik.append("\n" + i);
try
{
Thread.sleep(100);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
Thread watekPetla = new Thread(petla);
watekPetla.run();
}
return;
}
@Override
public void actionPerformed(ActionEvent e)
{
Object source = e.getSource();
if (source == chZatrzymajDzialanieProgramu)
{
if (chZatrzymajDzialanieProgramu.isSelected())
{
programJestWstrzymany = true;
return;
}
else if (!chZatrzymajDzialanieProgramu.isSelected())
{
programJestWstrzymany = false;
return;
}
}
}
}
public class Petla implements Runnable
{
Test test;
public Petla(Test test)
{
this.test = test;
}
public void run()
{
while (test.programJestWstrzymany)
{
}
return;
}
}
Wstrzymać wykonywanie programu udaje się, ale po odznaczeniu CheckBox'a program nie rusza. Co namieszałem?