Swing и потоки - Java

  1. Добрый день. Пытаюсь написать приложение, которое должно делать следующее: кнопка Старт запускает поток для ПРогрессбара, он заполняется; при повторном нажатии поток должен остановиться. У меня получается что не только прогресс бар засыпает, но и все приложение. Что подправить? Код


textual

Код к задаче: «Swing и потоки - Java»

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
 
 
class Form extends JFrame{
    JFrame j=new JFrame();
    JButton b1=new JButton("Start");
    JButton b2=new JButton("Prosto");
    private BoundedRangeModel model;
    JProgressBar p;
//    Mouse m=new Mouse();
    ButtonListener bListener = new ButtonListener();
    ThreadProcess t1=new ThreadProcess();
    JProgressBar pbUndefined;
    Form(){
        super("Поток-прогрессбар");
        j.setLayout(new FlowLayout(FlowLayout.CENTER));
        j.setSize(300,300);
        j.setResizable(false);
        j.setLocationRelativeTo(null);
        j.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 
        model=new DefaultBoundedRangeModel(1,2,0,10);
        p=new JProgressBar(model);
        j.add(p);
 
        pbUndefined = new JProgressBar(0, 100);
 
        pbUndefined.setStringPainted(true);
        pbUndefined.setString("Привет");
        j.add((pbUndefined));
 
        b1.setSize(40,30);
        b1.addActionListener(bListener);
        j.add(b1);
 
        b1.setSize(40,30);
        b2.addActionListener(new ActionListener() {
 
            @Override
            public void actionPerformed(ActionEvent e) {
                JOptionPane.showMessageDialog(j,"Hello");
            }
        });
        j.add(b2);
 
        j.setVisible(true);
    }
    class ThreadProcess extends Thread {
        public void run() {
            // Проверка завершения процесса
            while ( model.getValue() < model.getMaximum() ) {
                try {
                    // Увеличение текущего значение
                    model.setValue(model.getValue() + 1);
                    // Случайная временная задержка
                    sleep(1000);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }
 
 
    class ButtonListener implements ActionListener {
        private boolean f=false;
        ThreadProcess t=new ThreadProcess();
        @Override
        public  void actionPerformed(ActionEvent e) {
            if(!t.isAlive()) {
                t = new ThreadProcess();
                t.start();
                p.setValue(0);
                f=true;
            }
            else {
                try {
                    t.sleep(100);
                } catch (InterruptedException e1) {
                    e1.printStackTrace();
                }
                f=false;
            }
            if(pbUndefined.isIndeterminate()) {
                pbUndefined.setIndeterminate(false);
            }else {
                pbUndefined.setIndeterminate(true);
            }
 
        }
       
    }
}
 
 
public class Test {
    public static void main(String[] args) {
        new Form();
    }
}

СДЕЛАЙТЕ РЕПОСТ

11   голосов, оценка 4.455 из 5



Похожие ответы
  1. Можете написать несколько строк кода, которые реагируют на нажатие клавиш? Напишу на русском, т.к. не совсем понимаю: public void keyPressed{ если нажали на кнопку "вверх" переменная х=1; если нажали на кнопку "вниз" переменная х=-1; если нажали на кнопку "вправо" переменная у=1; если нажали на кнопку "влево" переменная у=-1; } Помогите пожалуйста реализовать

  1. Изучал я яву, читал темы на хабре, все шло хорошо до момента с KeyListener, в моменте считывания нажатой клавиши, говорит мол не знает класса keyPressed, библиотеки вроде все есть, в яве новый, прошу не бить сильно, до явы учил только C++

  1. не могу разобраться, как поставить таймер что бы по прошествию времени указанном в jTextField1 нажималась кнопка

  1. Написать приложение, которое выполняет анимацию изображения. Создать меню с командами Show picture, Choose, Animate, Stop, Quit. Команда Quit завершает работу приложения. При выборе команды Show picture в центре экрана рисуется объект, состоящий из нескольких графических примитивов. При выборе команды Choose открывается диалоговое окно, содержащее: -поле типа TextBox с меткой Speed для ввода скорости движения объекта; -группу Direction из двух переключателей (Up-Down, Left-Right) типа RadioButton для выбора направления движения; -кнопку типа Button. По команде Animate объект начинает перемещаться в выбранном направлении до края окна и обратно с заданной скоростью, по команде Stop — прекращает движение.Добавлено через 1 час 43 минуты Присутствуют незначительные наброски проекта.

  1. Господа, я поставил JTable на фрейм, сетку включил, первый столбец уменьшил, подскажите пожалуйста, как выравнить по центру текст в ячейках и поменять фон больших ячеек в шахматном порядке?

  1. Господа, Я вывожу данные в таблицу T1(JTable), cvet2 -это новый символ, который я ввожу в таблицу. Мне нужно что бы на каждой итерации цикла я бы видел изменения в таблице, а не только конечный результат. Подскажите, пожалуйста, как обновлять данные в таблице во время выполнения программы?

  1. Здравствуйте! Нужна помощь!Я программирую калькулятор и мне стало интересно каким образом можно вывести диалоговое окно, если в JTextField появилась, допустим цифра 30? Я пытался сделать вот так, но ничего не происходит, не пойму почему. Буду признателен за помощь)

  1. Друзья, здравствуйте! Я новичок, как на данном форуме, так и в java (на стадии начального обучения). Потому прошу, не судите строго. Вопрос такой, есть код, в коде реализована форма авторизации, при правильном вводе данных открывается следующий за ней класс JFrame с соответствующим окном. Однако следующая строка кода не выполняется, почему?