如何使用JProgressBar显示我的应用程序延迟?

时间:2010-02-17 07:12:23

标签: java swing jprogressbar

我写了一个简单的应用程序,我希望用JProgressBar来帮助我显示它的延迟;

我想用Joptionpane显示JProgressBar,带有取消按钮,它应该是模态的

这是我的源代码:

class CustomFrame extends JFrame {

  private JProgressBar progressBar;

  public CustomFrame() {
    long start = System.currentTimeMillis();
    myMethod();
    this.getContentPane().setLayout(null);
    this.setSize(200, 200);

    //JOptionPane. ?????

    this.setTitle("JFrame");
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setVisible(true);
       long end = System.currentTimeMillis();
        System.out.print("\nTime: " + (end - start));
  }
    public void myMethod(){
        try {
                     java.io.File file = new java.io.File("i://m.txt");
                     BufferedReader input =
                       new BufferedReader(new FileReader(file));
                     String line;
                     while ((line = input.readLine()) != null) {
                         if (line.indexOf("CREATE KGCGI=") != -1 ){
                             System.out.println(line);
                         }
                     }
                     input.close();
                   }
                   catch(Exception e){
                       e.printStackTrace();
                   }
    } 

谢谢...

1 个答案:

答案 0 :(得分:3)

要使其发挥作用,您需要做几件事:

  1. 您应该了解Swing中的线程问题。您的GUI绘图应该在EventDispatchThread上完成,磁盘I / O应该在工作线程中完成。有关详细信息,请参阅this tutorialSwingWorker JavaDocSwingUtilities.invokeLater
  2. 然后,您需要获取文件的大小(file.length()),以确定如何确定进度条的范围(myProgressBar.setMaximum(length)
  3. 当您遍历文件中的行时,您需要触发进度条的更新(myProgressBar.setValue(myProgressBar.getValue()+lineLength))。
  4. 通过批评的几点:

    • 你的构造函数不应该完成你的所有工作(即加载你的文件并弹出一个能够取消的选项窗格。构造函数应该完成创建对象所需的工作。你可能想要考虑让你的构造函数创建你的类,然后完成需要单独调用的工作,或者像init()方法那样。
    • 目前尚不清楚您使用JFrame作为超类做了什么。 JOptionPane是一个类,它会弹出一个带有一些文本的非常基本的模态对话框,可能是一个图标或输入字段。它不是嵌入对话框的面板。
    • 由于JOptionPane是用于创建基本消息对话框的非常基本的构造,因此使用JDialog可能更容易,它也可以是模态的。 JDialog将允许您根据需要添加按钮,其中独立JOptionPane将要求您使用是/否,或是/否/取消或确定/取消等。
    • 如果您仍想使用JOptionPane,并且只显示取消按钮,则可以实例化JOptionPane(而不是使用实用程序show*方法),并将进度条设置为messageJOptionPane.CANCEL_OPTION作为optionType参数。您仍然需要将其放入JDialog以使其可见。有关详细信息,请参阅this tutorial
      

    JOptionPane(构造函数)

         

    使用指定的按钮,图标,消息,标题等创建JOptionPane。然后,您必须将选项窗格添加到JDialog,在选项窗格上注册属性更改侦听器,并显示该对话框。有关详细信息,请参阅停止自动对话框关闭。