Как показать задержку моего приложения с JProgressBar? - PullRequest
0 голосов
/ 17 февраля 2010

Я написал простое приложение и хочу показать его задержку с помощью JProgressBar. Пожалуйста, помогите мне;

Я хочу показать JProgressBar с Joptionpane, с кнопкой отмены, и он должен быть модальным

это мой исходный код:

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 Ответ

3 голосов
/ 17 февраля 2010

Есть пара вещей, которые вам нужно будет сделать, чтобы это заработало:

  1. Вы должны знать о проблемах с многопоточностью в Swing. Рисование в вашем графическом интерфейсе должно быть выполнено в EventDispatchThread, а дисковый ввод-вывод должен выполняться в рабочем потоке. См. этот учебник , SwingWorker JavaDoc и SwingUtilities.invokeLater для получения более подробной информации
  2. Затем вы захотите получить размер вашего файла (file.length()), чтобы определить, как настроить область выполнения (myProgressBar.setMaximum(length))
  3. Когда вы перебираете строки в вашем файле, вы захотите запустить обновление индикатора выполнения (myProgressBar.setValue(myProgressBar.getValue()+lineLength)).

Пара пунктов в порядке критики:

  • ваш конструктор не должен отключаться и выполнять всю вашу работу (т.е. загружать файл и открывать панель параметров с возможностью отмены. Конструктор должен просто выполнять работу, необходимую для создания объекта. Вы можете захотеть подумайте о том, чтобы ваш конструктор создал ваш класс, а затем выполняйте работу, которую нужно выполнить, чтобы вызывать ее отдельно или внутри чего-то вроде init() метода.
  • Не ясно, что вы делаете с JFrame в качестве суперкласса. JOptionPane - это класс, который откроет очень простой модальный диалог с некоторым текстом, возможно, значком или полем ввода. Это не панель, встроенная в диалог.
  • Поскольку JOptionPane является очень базовой конструкцией для создания основного диалога сообщений, может быть проще использовать JDialog, который также можно сделать модальным. JDialog позволит вам добавлять кнопки по своему усмотрению, где в качестве автономного JOptionPane потребует от вас использовать Да / Нет, или Да / Нет / Отмена или ОК / Отмена и т. Д.
  • Если вы все еще хотите использовать JOptionPane и показывать только кнопку отмены, вы можете создать экземпляр JOptionPane (в отличие от использования служебных show* методов) с индикатором выполнения в качестве message, и JOptionPane.CANCEL_OPTION как optionType param. Вам все еще нужно будет поместить это в JDialog, чтобы сделать его видимым. См. этот урок для более подробной информации:

JOptionPane (конструктор)

Создает панель JOptionPane с указанными кнопками, значками, сообщением, заголовком и т. Д. Затем необходимо добавить панель параметров в JDialog, зарегистрировать прослушиватель изменения свойства на панели параметров и показать диалоговое окно. См. Остановка автоматического закрытия диалога для получения подробной информации.

...