Остановить работу программы Java нажатием кнопки Stop
Коллеги, вот таким образом я ищу нужные мне новости.
public class News_from_RSS {
static String text = "";
static String smi;
static int i = 0;
static int j = 0;
public static AtomicBoolean isStop = new AtomicBoolean(false);
public static void main(String[] args) throws IOException {
new Window();
new Thread(() -> readRSS()).start();
}
public static void readRSS() {
try {
for (i = 0; i < sources.length; i++) {
RSSFeedParser parser = new RSSFeedParser(sources[i]);
if (isStop.get()) return;
Feed feed = parser.readFeed();
for (FeedMessage message : feed.getMessages()) {
j++;
if (message.toString().indexOf(Window.find_word) >= 1) {
concatText(message.toString());
Window.appendText(message.toString());
}
if (isStop.get()) return;
}
}
//Вывод результат в консоль:
//System.out.println(text);
} catch (Exception e) {
e.printStackTrace();
}
}
Однако их так много, что иногда хочется остановить его выполнение кнопкой Stop
//Stop button
JButton stopBtn = new JButton("Stop");
stopBtn.setBackground(new Color(102, 205, 170));
stopBtn.setBounds(451, 10, 90, 23);
getContentPane().add(stopBtn);
// слушатель
ActionListener aLi_stop = new StopActionListener();
stopBtn.addActionListener(aLi_stop);
которую я создал, но не знаю что в ней указать:
public static class StopActionListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
News_from_RSS.isStop.set(true);
}
}
Или же в main надо создать поток или что? Подскажите..
Ответы (2 шт):
Автор решения: Olmicron
→ Ссылка
Ну для примера можно сделать так (это лишь пример!):
public class News_from_RSS {
public static AtomicBoolean isStop = new AtomicBoolean(false)
public static void main(String[] args) {
new Window();
new Thread(() -> readRSS()).start();
}
public static void readRSS() {
try {
for (i = 0; i < sources.length; i++) {
RSSFeedParser parser = new RSSFeedParser(sources[i]);
if ( isStop.get() ) return;
Feed feed = parser.readFeed();
for (FeedMessage message : feed.getMessages()) {
if (message.toString().indexOf(Window.find_word) >= 1) {
Window.appendText(message.toString());
}
if ( isStop.get() ) return;
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static class StopActionListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
News_from_RSS.isStop.set(true);
}
}
}
Автор решения: Alexander Chernin
→ Ссылка
interface MessageListener {
public void message(String value);
}
class RSSReaderThread extends Thread {
private AtomicBoolean _doStop = new AtomicBoolean(false);
private MessageListener listener = null;
public void doStop() {
_doStop.set(true);
}
public void run() {
try {
// ...
for (FeedMessage message : feed.getMessages()) {
if(_doStop.get())
break; // Выскакиваем из потока
if (message.toString().indexOf(Window.find_word) >= 1) {
if( _listener != null )
_listener.message(message.toString());
}
}
// ...
} catch (Exception e) {
e.printStackTrace();
}
}
}
class Window extends <что-то там графическое-оконное>{
private Button stopButton = ...
private RSSReaderThread _thread
public static void main(String[] args) {
_thread = new RSSReaderThread();
_thread.setMessageListener(new MessageListener() {
public void message(String value) {
this.appendText();
}
});
_thread.start();
}
public static class StopActionListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
this._thread.doStop();
}
}
}