как изменить цвет круга в каждой секунде

import java.applet.*;
import java.awt.*;     //Graphics, Shape
import java.awt.geom.*; //Graphics2D
/*


*/
public class Oval1 extends Applet implements Runnable {
    Shape circle;
    Color c;
    public void init() {
        circle = new Ellipse2D.Float(90,100, 90, 90);
        repaint();
        Thread th = new Thread(this);
        th.start();
    }
    public void run() {
        try {
            while(true) {
                System.out.println(1);
                c = Color.cyan;
                repaint();
                Thread.sleep(1000);
                System.out.println(2);
                c = Color.gray;
                repaint();
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
    public void update(Graphics g) {
        paint(g);
    }
    public void paint(Graphics g) {
        Graphics2D d = (Graphics2D) g;
        d.setColor(c);
        d.fill(circle);
    }
}

I am trying to create an applet that has a filled circle in middle of the applet & changing the color of circle in every second, means I want to show the circle like it's blinking.

Я хочу изменить цвет круга в каждую секунду.

For this I use Shape class & Thread, but it's still not working.

Я уже пытаюсь использовать paint (g) путем переопределения метода обновления.

Это также не повлияет

2
nl ja de
да, в консоли я получил заявление println каждую секунду ...
добавлено автор Bhushankumar Lilapara, источник
Вы получаете вывод System.out.println?
добавлено автор Thilo, источник
C изменяет свой цвет, но вы его не видите. Добавить Thread.sleep (1000); до конца блока while после repaint (); и вы получите то, что хотите.
добавлено автор user1326628, источник

3 ответы

Добавьте Thread.sleep (1000) после второй repaint ().

        while(true) {

            System.out.println(1);
            c = Color.cyan;
            repaint();
            Thread.sleep(1000);
            System.out.println(2);
            c = Color.gray;
            repaint();
            Thread.sleep(1000);
        }
3
добавлено
Спасибо ... это сделано сейчас ....
добавлено автор Bhushankumar Lilapara, источник

вы можете использовать Java Timer вместо Thread.sleep (). Например, используя таймер, http://docs.oracle .com/JavaSE/7/документы/апи/javax/качели/Timer.html . Thread.sleep() блокирует метод рисования апплета.

2
добавлено
Мне нужно использовать Thread, потому что это мое школьное задание, определение, предоставленное моим профессором ...
добавлено автор Bhushankumar Lilapara, источник
Можете ли вы привести мой пример с использованием класса Timer, потому что я не знаю, как использовать класс Timer swing?
добавлено автор Bhushankumar Lilapara, источник
Вы можете посмотреть, что en.wikiversity.org/wiki/Java_applets или leepoint.net/notes-java/other/10time/20timer.html
добавлено автор umert, источник

попробуйте это ..

Just need to put Thread.sleep(1000); after second repaint(), currently after second repaint immediately first repaint call so it over paint on second repaint();

import java.applet.*;
import java.awt.*;     //Graphics, Shape
import java.awt.geom.*; //Graphics2D
/*


*/
public class Oval1 extends Applet implements Runnable {
    Shape circle;
    Color c;
    public void init() {
        circle = new Ellipse2D.Float(90,100, 90, 90);
        repaint();
        Thread th = new Thread(this);
        th.start();
    }
    public void run() {
        try {
            while(true) {
                System.out.println(1);
                c = Color.cyan;
                repaint();
                Thread.sleep(1000);
                System.out.println(2);
                c = Color.gray;
                repaint();
                Thread.sleep(1000); 
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
    public void update(Graphics g) {
        paint(g);
    }
    public void paint(Graphics g) {
        Graphics2D d = (Graphics2D) g;
        d.setColor(c);
        d.fill(circle);
    }
}
1
добавлено
pro.jvm
pro.jvm
3 503 участник(ов)

Сообщество разработчиков Java Scala Kotlin Groovy Clojure Чат для нач-их: @javastart Наш сайт: projvm.com projvm.ru Наш канал: @proJVM Вакансии: @jvmjobs Конфы: @jvmconf

Java & Co
Java & Co
2 370 участник(ов)

Можно обсуждать с матом и без всё, что касается жабы, вплоть до холиваров. НЕ ИМЕЕТ ОТНОШЕНИЯ К САЙТУ JAVARUSH.RU ПРАВИЛА - https://t.me/javarush/75723 Вакансии сюда - https://telegram.me/joinchat/B7IzvUCnfo6d8t3yIxKguQ По вопросам - @thedude

learn.java
learn.java
1 888 участник(ов)

Чат для начинающих и не только Статистика: https://combot.org/chat/-1001083535868 Основной чат - @jvmchat

Java Underground
Java Underground
169 участник(ов)

https://vk.com/javatutorial

Javanese Questions
Javanese Questions
109 участник(ов)

Чат предназначен для обмена знаниями строго в формате в вопрос-ответ. Тема — Java, Kotlin и Android. Вопрос должен быть предварительно прогуглен, понятно и грамотно сформулирован, помечен хэштегами. Ответ — тем более. Куски кода размером в несколько строк можно писать прямо здесь, для больших кусков кода стоит использовать http://gist.github.com/, http://pastebin.com/, https://codeshare.io/ или любой аналогичный сервис. В некоторых случаях можно прикреплять скриншоты. Стикеры и гифки запрещены. Дополнять и уточнять вопросы и ответы — редактированием исходного сообщения. Обсуждения должны приводить к редактированию вопроса/ответа и удаляться. По хештегам можно искать существующие вопросы и овтеты: #вопрос #ответ #git #generics #java #server #awt #javafx #swing #kotlin #anko #tornadofx #ktor #android #recyclerView #performance #arch #network #permissions #storage #async