欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

监控指定耗时线程的进度条ThreadProgressBar,,public class

来源: javaer 分享于  点击 16254 次 点评:62

监控指定耗时线程的进度条ThreadProgressBar,,public class


public class ThreadProgressBar implements ActionListener {    private static final String DEFAULT_STATUS = "Please Waiting";    private JDialog dialog;    private JProgressBar progressBar;    private JLabel lbStatus;    private JButton btnCancel;    private Window parent;    private Thread thread; // 处理业务的线程    private String statusInfo;    private String resultInfo;    private String cancelInfo;    private ThreadProgressBar(Window parent, Thread thread, String statusInfo,            String resultInfo, String cancelInfo) {        this.parent = parent;        this.thread = thread;        this.statusInfo = statusInfo;        this.resultInfo = resultInfo;        this.cancelInfo = cancelInfo;        initUI();        startThread();        dialog.setVisible(true);    }    public static void show(Window parent, Thread thread) {        new ThreadProgressBar(parent, thread, DEFAULT_STATUS, null, null);    }    public static void show(Window parent, Thread thread, String statusInfo) {        new ThreadProgressBar(parent, thread, statusInfo, null, null);    }    public static void show(Window parent, Thread thread, String statusInfo,            String resultInfo, String cancelInfo) {        new ThreadProgressBar(parent, thread, statusInfo, resultInfo,                cancelInfo);    }    private void initUI() {        if (parent instanceof Dialog) {            dialog = new JDialog((Dialog) parent, "处理消息", true);        } else if (parent instanceof Frame) {            dialog = new JDialog((Frame) parent, "处理消息", true);        } else {            dialog = new JDialog((Frame) null, "处理消息", true);        }        final JPanel mainPane = new JPanel(null);        progressBar = new JProgressBar();        lbStatus = new JLabel("" + statusInfo);        btnCancel = new JButton("Cancel");        progressBar.setIndeterminate(true);        btnCancel.addActionListener(this);        mainPane.add(progressBar);        mainPane.add(lbStatus);        dialog.getContentPane().add(mainPane);        dialog.setUndecorated(true);// 除去title        dialog.setResizable(true);        dialog.setSize(390, 100);        dialog.setLocationRelativeTo(parent); // 设置此窗口相对于指定组件的位置        dialog.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE); // 不允许关闭        mainPane.addComponentListener(new ComponentAdapter() {            public void componentResized(ComponentEvent e) {                layout(mainPane.getWidth(), mainPane.getHeight());            }        });    }    private void startThread() {        new Thread() {            public void run() {                try {                    // 处理耗时任务                    thread.start();                    // 等待事务处理线程结束                    thread.join();                } catch (InterruptedException e) {                    e.printStackTrace();                } finally {                    // 关闭进度提示框                    dialog.dispose();                    if (resultInfo != null && !resultInfo.trim().equals("")) {                        String title = "消息";                        JOptionPane.showMessageDialog(parent, resultInfo,                                title, JOptionPane.INFORMATION_MESSAGE);                    }                }            }        }.start();    }    private void layout(int width, int height) {        progressBar.setBounds(20, 40, 350, 25);        lbStatus.setBounds(20, 20, 350, 25);        btnCancel.setBounds(width - 85, height - 31, 75, 21);    }    @SuppressWarnings("deprecation")    public void actionPerformed(ActionEvent e) {        resultInfo = cancelInfo;        thread.stop();    }}//该片段来自于http://byrx.net
相关栏目:

用户点评