作者H45 (!H45)
看板java
标题Re: [问题] 如何停止副程式内的回圈? NetBeans人机 …
时间Sun May 17 23:34:51 2009
拿去参考:
// 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