看了下面的,没有答案啊
http://topic.csdn.net/t/20060327/17/4643433.html具体怎么用flag做呢?

解决方案 »

  1.   

    说出你要这么做的理由,也就是你的需求。大部分情况,可以用wait/notify,notifyall等实现。
      

  2.   

    谢谢楼上的。作了swing的程序,
    简单的说有一个进程会去读一个文件,分析计算下,输出到另一个文件,并用进度条现实进度。
    有一个中止的按钮,就是结束整个过程,但是按了中止后会有一个确认框,确认是否真的要中止。
    就是这个时候希望在用户确认的时候,把进程给挂起。
    不然用户等在那里不确认,一会就弹出处理做完的对话框了, 很奇怪。
      

  3.   

    写了一个例子,仅供参考:import java.awt.GridLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JProgressBar;
    import javax.swing.SwingUtilities;/**
     * 
     * @author bzwm
     * 
     */
    public class ProgressSample extends JFrame {
    private JProgressBar progressBar = null; private JButton startBtn = null; private JButton pauseBtn = null; private JButton stopBtn = null; private BarThread stepper = null; public ProgressSample() {
    super("Progress Bars"); initComponents();
    layoutComponents();
    } private void initComponents() {
    progressBar = new JProgressBar(0, 100);
    progressBar.setStringPainted(true);
    progressBar.setIndeterminate(false); startBtn = new JButton("Start");
    pauseBtn = new JButton("Pause");
    stopBtn = new JButton("Stop");
    } private void layoutComponents() {
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); ButtonClick actionListener = new ButtonClick();
    startBtn.addActionListener(actionListener);
    pauseBtn.addActionListener(actionListener);
    stopBtn.addActionListener(actionListener); JPanel topPnl = new JPanel();
    topPnl.add(progressBar); JPanel btnPnl = new JPanel(new GridLayout(1, 3, 10, 10));
    btnPnl.add(startBtn);
    btnPnl.add(pauseBtn);
    btnPnl.add(stopBtn); setLayout(new GridLayout(2, 1));
    add(topPnl);
    add(btnPnl); setSize(300, 100);
    setVisible(true);
    } private class ButtonClick implements ActionListener {
    public void actionPerformed(ActionEvent e) {
    if (e.getSource() == startBtn) {
    startBtn.setEnabled(false);
    stepper = new BarThread(progressBar);
    stepper.start(); } else if (e.getSource() == pauseBtn) { stepper.stopWork();
    stepper = null;
    startBtn.setEnabled(true); } else if (e.getSource() == stopBtn) {
    System.exit(0);
    }
    }
    } public static void main(String args[]) {
    new ProgressSample();
    }
    }class BarThread extends Thread {
    private static final int DELAY = 500; private boolean run = true; private Object locker = new Object(); JProgressBar progressBar; public BarThread(JProgressBar bar) {
    progressBar = bar;
    } public void run() {
    synchronized (locker) { doSomething();

    int minimum = progressBar.getMinimum();
    int maximum = progressBar.getMaximum();
    Runnable runner = new Runnable() {
    public void run() {
    int value = progressBar.getValue();
    progressBar.setValue(value + 1);
    }
    }; for (int i = minimum; i < maximum; i++) {
    try {
    if (!run) {
    locker.wait();
    }
    SwingUtilities.invokeAndWait(runner);
    // Our task for each step is to just sleep
    Thread.sleep(DELAY);
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    }
    }

    private void doSomething(){
    //do something that you want.
    } public void stopWork() {
    run = false;
    }
    }
      

  4.   

    刚刚搞错了,
    吃过饭,改了下:import java.awt.GridLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JProgressBar;
    import javax.swing.SwingUtilities;/**
     * 
     * @author bzwm
     * 
     */
    public class ProgressSample extends JFrame {
    private JProgressBar progressBar = null; private JButton startBtn = null; private JButton pauseBtn = null; private JButton stopBtn = null; private BarThread stepper = null; public ProgressSample() {
    super("Progress Bars"); initComponents();
    layoutComponents();
    } private void initComponents() {
    progressBar = new JProgressBar(0, 100);
    progressBar.setStringPainted(true);
    progressBar.setIndeterminate(false); startBtn = new JButton("Start");
    pauseBtn = new JButton("Pause");
    stopBtn = new JButton("Stop");
    } private void layoutComponents() {
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); ButtonClick actionListener = new ButtonClick();
    startBtn.addActionListener(actionListener);
    pauseBtn.addActionListener(actionListener);
    stopBtn.addActionListener(actionListener); JPanel topPnl = new JPanel();
    topPnl.add(progressBar); JPanel btnPnl = new JPanel(new GridLayout(1, 3, 10, 10));
    btnPnl.add(startBtn);
    btnPnl.add(pauseBtn);
    btnPnl.add(stopBtn); setLayout(new GridLayout(2, 1));
    add(topPnl);
    add(btnPnl); setSize(300, 100);
    setVisible(true);
    } private class ButtonClick implements ActionListener {
    public void actionPerformed(ActionEvent e) {
    if (e.getSource() == startBtn) {
    startBtn.setEnabled(false);
    stepper = new BarThread(progressBar);
    stepper.start(); } else if (e.getSource() == pauseBtn) { stepper.stopWork();
    stepper = null;
    startBtn.setEnabled(true); } else if (e.getSource() == stopBtn) {
    System.exit(0);
    }
    }
    } public static void main(String args[]) {
    new ProgressSample();
    }
    }class BarThread extends Thread {
    private static final int DELAY = 500; private boolean run = true; JProgressBar progressBar; public BarThread(JProgressBar bar) {
    progressBar = bar;
    } public void run() { doSomething(); int minimum = progressBar.getMinimum();
    int maximum = progressBar.getMaximum();
    Runnable runner = new Runnable() {
    public void run() {
    int value = progressBar.getValue();
    progressBar.setValue(value + 1);
    }
    }; for (int i = minimum; i < maximum; i++) {
    try {
    if (!run) {
    break;
    }
    SwingUtilities.invokeAndWait(runner);
    // Our task for each step is to just sleep
    Thread.sleep(DELAY);
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    } private void doSomething() {
    //do something that you want.
    } public void stopWork() {
    run = false;
    }
    }