Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Задержка выполнения проги


Автор: aromanu 12.6.2009, 08:27
Хочу вывести на экран 2-мерный массив. Сделать это нужно с задержкой выполнения программы 1 сек. (Например в С++ это delay()). Как это мне реализовать в Java. Я почитал в нете, там написано что то про потоки и обработка исключений. Есть ли способ обойтись без потоков, одним оператором? 

Автор: admin82 12.6.2009, 08:39
Код

Thread.sleep(1000);


Куда уж проще

Автор: aromanu 12.6.2009, 08:57
Да проще некуда. Насколько я знаю приведенная вами конструкция должна использоваться в try catch.
На скрине соответствующая ошибка smile

Добавлено через 51 секунду
http://s50.radikal.ru/i129/0906/2a/a6574a8cde4f.png

Автор: aromanu 12.6.2009, 10:13
Эй, куда подевались многоуважаемые Гуру?

Автор: kamre 12.6.2009, 10:44
Цитата(admin82 @ 12.6.2009,  08:39)
Код

Thread.sleep(1000);


Куда уж проще

Вызывать sleep на EDT не корректно, т.к. будет подвешиваться весь GUI. Если нужна анимация, то нужно пользоваться таймерами или соответстующими библиотеками.

Автор: Kangaroo 12.6.2009, 11:16
Цитата(aromanu @  12.6.2009,  08:57 Найти цитируемый пост)
На скрине соответствующая ошибка 

Ты ж не зря в NetBeans'e работаешь, он же должен пользу приносить smile
Смотрим скрин - Оранжевый прямоугольник с лампочкой - Тынц - Все работает.

Добавлено через 59 секунд
Получится вот так:
Код

try {
               Thread.sleep(1000);
           } catch (InterruptedException e1) {
               e1.printStackTrace();
           }

Автор: aromanu 12.6.2009, 11:40
Послушался вашего совета, прога вообще перестала работать
Код

 public void paintComponent(Graphics g) { //перегруженный открытый метод тип его аргумента - абстрактный класс Graphics
        axis Laxis = new axis();
        aloft Laloft = new aloft();
        Color c = new Color(0, 0, 0);
        Polygon Lp; //просто указатель на обьект типа Polygon
        Thread t; //указатель на поток
        t = Thread.currentThread(); //возвращение указателя на текущий поток
        super.paintComponent(g); //вызов конструктора суперкласса
        Graphics2D g2 = (Graphics2D)g; //приведение типов
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); //для гладких краев на рисунке
        Lp = Laxis.getP();
        g2.drawPolygon(Lp);
        Lp = Laloft.getP(0, 0);

            for(int i = 0; i < myFrame.n; ++i)
                for(int j = 0; j < myFrame.n; ++j) {
            try {
                g2.drawPolygon(Laloft.getP(i, j));
                Thread.sleep(500);
            } catch (InterruptedException ex) {
                Logger.getLogger(image3D.class.getName()).log(Level.SEVERE, null, ex);
            }
                }
    }
}


Автор: 4EJIOBEK 12.6.2009, 12:05
нельзя делать sleep в методе отрисовки компонента

Автор: aromanu 12.6.2009, 12:11
Да я уже понял. Ладно, что бы сделать то, что я хочу, нужно немного подредактировать прогу.
Я существует в Java метод, который заполняет замкнутую область, в которой находится точка с указанными координатами заданным цветом.

Автор: math64 12.6.2009, 20:25
Есть метод fill(Shape) - позволяет залить область практически любой формы.

Автор: aromanu 12.6.2009, 23:23
Ну наконец то. Спасибо большое. Действительно работает. Это то что я хотел.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)