Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.08.2013, 13:02   #1
pavelslap
Пользователь
 
Регистрация: 08.02.2009
Сообщений: 73
Вопрос Loading bar

Добрый день. Задача сделать строку "выполняется задача" с процентами. Проценты показываются в зависимости от того, насколько выполнены действия. Сами действия - это разрезка картинки на маленькие куски через скрипт php (думаю это не столь важно). Для этого у меня сделан отдельный блок в программе. Нарезка картинки (подпрограмма) вызывается так:
Код:
        
DocSplitter d = new DocSplitter();
d.splitBlock(1);
d.splitBlock(2);
Пока работает этот процесс или действия (а занять он может секунд 30), будут наполнятся проценты. На данный момент я сделал наполнение процентами, но они работают вне зависимости от нарезки фоток. То есть сначала срабатывает нарезка, а затем открывается окно с процентами. А надо всё это объединить. Не подскажете куда копать? Может это многопоточность. Вот код того, что у меня есть на данный момент (те строки, которые я приводил выше закомментированы).

Код:
/**
 * Sample Skeleton for "Scene4.fxml" Controller Class You can copy and paste
 * this code into your favorite IDE
 *
 */
package app;

ЗДЕСЬ ИМПОРТЫ

public class Scene4Controller extends JPanel
        implements Initializable, PropertyChangeListener {

    private WinLoader dialogs = new WinLoader();
    @FXML //  fx:id="backButton"
    private Button backButton; // Value injected by FXMLLoader
    private Button nextButton;
    private ProgressMonitor progressMonitor;
    private JTextArea taskOutput;
    private Task task;

    class Task extends SwingWorker<Void, Void> {

        @Override
        public Void doInBackground() {
            Random random = new Random();
            int progress = 0;
            setProgress(0);
            try {
                Thread.sleep(1000);
                while (progress < 100 && !isCancelled()) {
                    //Sleep for up to one second.
                    Thread.sleep(random.nextInt(1000));
                    //Make random progress.
                    progress += random.nextInt(10);
                    setProgress(Math.min(progress, 100));
                }
            } catch (InterruptedException ignore) {
            }
            return null;
        }

        @Override
        public void done() {
            Toolkit.getDefaultToolkit().beep();
            //nextButton.setEnabled(true);
            progressMonitor.close();
        }
    }

    public Scene4Controller() {
        //nextButton.setActionCommand("start");
        //nextButton.addActionListener(this);
        taskOutput = new JTextArea(5, 20);
        taskOutput.setMargin(new Insets(5, 5, 5, 5));
        taskOutput.setEditable(false);
    }

    public void propertyChange(PropertyChangeEvent evt) {
        if ("progress" == evt.getPropertyName()) {
            int progress = (Integer) evt.getNewValue();
            progressMonitor.setProgress(progress);
            String message =
                    String.format("Completed %d%%.\n", progress);
            progressMonitor.setNote(message);
            taskOutput.append(message);
            if (progressMonitor.isCanceled() || task.isDone()) {
                Toolkit.getDefaultToolkit().beep();
                if (progressMonitor.isCanceled()) {
                    task.cancel(true);
                    taskOutput.append("Task canceled.\n");
                } else {
                    taskOutput.append("Task completed.\n");
                }
                //nextButton.setEnabled(true);
            }
        }

    }

    // Handler for Button[fx:id="backButton"] onAction
    public void handleBackButtonAction(ActionEvent event) {
        try {
            Stage stage = (Stage) backButton.getScene().getWindow();
            stage.setTitle("Take photo - reverse side");
            dialogs.switchPage(stage, "/app/Scene3.fxml");
        } catch (Exception ex) {
            Logger.getLogger(Scene3Controller.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    // Handler for Button[id="nextButton"] onAction
    public void handleNextButtonAction(ActionEvent event) throws FileNotFoundException, IOException {
        
        //DocSplitter d = new DocSplitter();
        //d.splitBlock(1);
        //d.splitBlock(2);
        
        progressMonitor = new ProgressMonitor(Scene4Controller.this, "Running a Long Task", "", 0, 100);
        progressMonitor.setProgress(0);
        task = new Task();
        task.addPropertyChangeListener(this);
        task.execute();

    }

    @Override // This method is called by the FXMLLoader when initialization is complete
    public void initialize(URL fxmlFileLocation, ResourceBundle resources) {
        assert backButton != null : "fx:id=\"backButton\" was not injected: check your FXML file 'Scene4.fxml'.";

        // initialize your logic here: all @FXML variables will have been injected

    }
}
pavelslap вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Tried to install Linux, and Windows do not loading Krasi Windows 0 27.09.2012 14:09
Error loading type library stilles55 БД в Delphi 29 19.05.2011 00:00
ошибка error loading type library DEsh Общие вопросы Delphi 4 08.04.2010 18:13
Error loading file - при открытии .avi файла kotzzz Мультимедиа в Delphi 9 24.03.2010 19:30
Progress Bar Alexander X Компоненты Delphi 2 17.12.2007 03:18