Как реализовать поток внутри JFrame? По нажатию на кнопку создается новый JFrame, в котором рисуется график. Поскольку встроенных графиков в Java.swing нету, то я использую библиотеку jCharts. Библиотека хорошая, но для корректного отображения в созданном фрэйме я запускаю поток, который периодически перерисовывает график. При этом работает кнопка свернуть, а крестик не работает. Из-за того, что поток засыпает постоянно, не прожимается еще и главный фрэйм, на котором кнопка создания фрэйма с графиком. Как это обойти ? Возможно есть событие перемещения окна, тогда я знаю как организовать и без потока фрэйм с графиком. Сейчас убрать поток невозиожно, тк необходима перерисовка. UPD Иными словами, мне надо заставить поток, рисуйщий главный фрэйм, спать пока не закрыт фрэйм с графиком. frame = new JFrame(); frame.setSize( 600, 600 ); frame.setTitle(title); frame.setResizable(false); frame.setVisible( true ); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Thread T = new Thread (this); init_components(type, xAxisLabels, xAxisTitle, yAxisTitle, title, legendLabels, data); javax.swing.SwingUtilities.invokeLater(new Runnable() { public void run() { T.run(); } }); @Override public void run() { while (true) { try { repaint(); T.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(System.out); } } }
Для решения проблемы с кнопкой свернуть и закрыть JFrame с графиком, вам нужно аккуратно управлять потоком отрисовки и завершением работы фрейма с графиком.
Один из способов - использовать флаг для указания, что фрейм с графиком закрыт. В вашем коде вы можете добавить такой флаг и связать его с событием закрытия фрейма с графиком:
boolean graphFrameClosed = false; // флаг для отслеживания закрытия фрейма с графиком // Код для создания фрейма с графиком и запуска потока ... @Override public void run() { while (!graphFrameClosed) { try { repaint(); T.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(System.out); } } }
А затем в обработчике закрытия фрейма с графиком устанавливать этот флаг в true:
Для решения проблемы с кнопкой свернуть и закрыть JFrame с графиком, вам нужно аккуратно управлять потоком отрисовки и завершением работы фрейма с графиком.
Один из способов - использовать флаг для указания, что фрейм с графиком закрыт. В вашем коде вы можете добавить такой флаг и связать его с событием закрытия фрейма с графиком:
boolean graphFrameClosed = false; // флаг для отслеживания закрытия фрейма с графиком// Код для создания фрейма с графиком и запуска потока
...
@Override
public void run() {
while (!graphFrameClosed) {
try {
repaint();
T.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace(System.out);
}
}
}
А затем в обработчике закрытия фрейма с графиком устанавливать этот флаг в true:
frame.addWindowListener(new WindowAdapter() {@Override
public void windowClosing(WindowEvent e) {
graphFrameClosed = true;
frame.dispose();
}
});
Таким образом, после закрытия фрейма с графиком поток отрисовки будет прекращать работу, и нажатие на крестик будет закрывать фрейм корректно.