Re: [問題] 如何停止副程式內的迴圈? NetBeans人機 …
拿去參考:
// FrameTest.java
public class FrameTest extends JFrame {
public static void main(String args[]) {
new FrameTest().setVisible(true);
}
private JTextArea jTextArea2 = new JTextArea(20, 20);
private JButton button = new JButton("stop");
public FrameTest() {
add(jTextArea2);
add(button);
setLayout(new FlowLayout());
MouseHandler m = new MouseHandler(jTextArea2);
StopAction c = new StopAction();
button.addActionListener(c);
c.setMouseHandler(m);
addMouseListener(m);
}
}
// MouseHandler.java
public class MouseHandler implements MouseListener {
private JTextArea jTextArea2;
private boolean stopRequested = false;
public MouseHandler(JTextArea jTextArea2) {
this.jTextArea2 = jTextArea2;
}
public void requestStop() {
stopRequested = true;
}
@Override
public void mouseClicked(MouseEvent arg0) {
result();
}
public void mouseEntered(MouseEvent arg0) {}
public void mouseExited(MouseEvent arg0) {}
public void mousePressed(MouseEvent e) {}
@Override
public void mouseReleased(MouseEvent arg0) {
}
private void result () {
new Thread() { public void run() { for(int i = 1; i < 1000; i++) { // 跑一千
次
SwingUtilities.invokeLater( new Runnable() {
public void run() {
jTextArea2.setText(""); //先清空內容
}
});
do {
if (stopRequested) {
return;
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {}
SwingUtilities.invokeLater( new Runnable() {
public void run() {
jTextArea2.append(1+"\n");
}
});
} while (true);
}}}.start();
}
}
// StopAction.java
public class StopAction implements ActionListener {
private MouseHandler handler;
public void setMouseHandler(MouseHandler handler) {
this.handler = handler;
}
@Override
public void actionPerformed(ActionEvent arg0) {
handler.requestStop();
}
}
拿去跑 FrameTest.main(null);
點擊面板任一處即開始不斷地印出 1
按下 Stop 按鈕即停止。
我拿你的程式碼稍微改一下的,應該不難對照....
※ 引述《ox5566 (阿興)》之銘言:
: 我用SUN NETBEANS 畫了人機介面的東西...
: 做了個按鈕 jButton 以及顯示文字的 jTextArea
: 功能為 按下按鈕後 他會執行副程式 附程式裡面的迴圈會ㄧ值跑
: 直行其內容...
: 我想問的是... 我現在想做第二個按鈕(jButton) 讓他按下去可以
: 停止這個副程式的迴圈繼續執行.... 該如何做呢???
: 程式如下:
: 按鈕程式:
: private void jButton6MouseClicked(java.awt.event.MouseEvent evt) {
: this.result();
: }
: 執行的副程式:
: public void result () {
: new Thread() {
: public void run() {
: for(int i = 1; i < 1000; i++) { // 跑一千次
: jTextArea2.setText(" "); //先清空內容
: String data;
: try {
: FileReader fRead = new FileReader("12345.txt");
: BufferedReader fIn = new BufferedReader(fRead);
: do {
: data = fIn.readLine(); // 讀取一行字串資料
: if(data == null) break; // 若資料讀取完畢,跳離迴圈
: jTextArea2.append(data+"\n");
: } while (true);
: fRead.close(); // 關閉檔案
: }
: catch (IOException e) {
: jTextArea2.setText("檔案處理有誤!!");
: }
: try {
: Thread.currentThread().sleep(1000);
: } catch (InterruptedException ie) {
: }
: }
: }
: }.start();
: }
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.116.247.13
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):