Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
20 / 20 / 3
Регистрация: 07.02.2014
Сообщений: 233

Repaint() не выполяется

03.08.2014, 22:02. Показов 1709. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задача генерировать изображение на BufferedImage и во время генерации отрисовывать его на JPanel. Отрисовка картинки выполняется в переопределённом у JPanel методе paint(). При генерации изображения вызывается перерисовка методом repaint(), но на деле ничего не происходит. Картинка перерисовывается только после окончания метода генерации, даже если за это время repaint() не был вызван ни разу.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.08.2014, 22:02
Ответы с готовыми решениями:

Jframe repaint
Что делают эти методы ?:declare: this.invalidate(); this.revalidate(); this.repaint(); this.validate();

Метод repaint() не выполняется
Помогите, пожалуйста... Просто замучился уже с графикой.:( Суть вот в чем: есть метод paintComponent(Graphics g) (пробовал заменить на...

Медленная функция repaint()
Здравствуйте! Я пытаюсь написать арканоид по урокам из youtube. При запуске компилятором приложения картинка обновляется очень медленно,...

6
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
04.08.2014, 02:34
А вы генерируете свое изображение в главном (UI) потоке? Или создаете другой?
0
20 / 20 / 3
Регистрация: 07.02.2014
Сообщений: 233
04.08.2014, 13:22  [ТС]
Цитата Сообщение от turbanoff Посмотреть сообщение
А вы генерируете свое изображение в главном (UI) потоке? Или создаете другой?
В главном. Вот где идёт вызов метода генерации:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
public static void main(String args[]) {
    java.awt.EventQueue.invokeLater(new Runnable() {
        @Override
        public void run() {
            JFrame f = new JFrame("Noises");
            ...
            ColorNoiseGenerator rp = new ColorNoiseGenerator(300, 200);
            f.getContentPane().add(rp);
            f.pack();
            rp.whiteNoise();//эта строка
        }
    });
}
Если дело в этом, то как вызвать метод в новом потоке?
Я попробовал обернуть строку таким кодом
Java
1
2
3
4
5
6
java.awt.EventQueue.invokeLater(new Runnable() {
    @Override
    public void run() {
        rp.whiteNoise();//неправильно
    }
});
но не знаю как правильно обращаться к переменной rp в методе run
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
04.08.2014, 13:30
x_Alex_x, repaint посылает в очередь обработки сообщений новое событие. Если вы всё еще занимаете основной поток - то это сообщение никак не обработается.
Чтобы вызывать метод в новом потоке, нужно создать поток, и вызвать в нем нужный метод.
1
20 / 20 / 3
Регистрация: 07.02.2014
Сообщений: 233
04.08.2014, 14:30  [ТС]
turbanoff, понятно. Тогда может быть так:
Java
1
2
3
4
5
6
new Thread(new Runnable() {
    @Override
    public void run() {
        rp.whiteNoise();
    }
}).start();
но я всё ещё
Цитата Сообщение от x_Alex_x Посмотреть сообщение
не знаю как правильно обращаться к переменной rp в методе run
Добавлено через 41 минуту
NetBeans предложил сделать rp final
Java
1
final ColorNoiseGenerator rp = new ColorNoiseGenerator(300, 200);
Теперь всё работает. А можно ли обойтись без final?
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
04.08.2014, 15:44
x_Alex_x, Можно сделать эту переменную полем класса.
0
20 / 20 / 3
Регистрация: 07.02.2014
Сообщений: 233
04.08.2014, 16:08  [ТС]
turbanoff, в моём случае получится ещё большая путаница так как буду создавать экземпляр ColorNoiseGenerator в классе ColorNoiseGenerator.
Я перенёс вызов этого метода из main в обработчик нажатия клавиши. Так что теперь это выглядит более-менее сносно:
Java
1
2
3
4
5
6
7
8
if (e.getKeyCode() == KeyEvent.VK_SPACE) {
    new Thread(new Runnable() {
        @Override
        public void run() {
            ColorNoiseGenerator.this.whiteNoise();
        }
    }).start();
}
Появилась новая проблема, возникающая при многократном нажатии пробела: запускаются несколько методов генерации, взаимодействующими с одним и тем же объектом BufferedImage, но это уже, как говорится, совсем другая история))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.08.2014, 16:08
Помогаю со студенческими работами здесь

Не работает repaint с задержкой
У меня есть персонаж, которому я хочу сделать функцию прыжка. Во втором потоке, я создал такой вот код: public void run() { if...

Не работает jTable1.repaint() в апплете
Есть апплет, в нём имеется таблица jTable1 . Пытаюсь добавить строку через изменение массива строк (который читает getRowCount()). Делаю...

Перерисовка JFrame. Не работает repaint();
Приветствую, уважаемые. У меня такая беда: работаю в JBuilder 2006, там используется JDK: java version 1.5.0_03-b07 Написал мелкий...

Repaint(): не вызывается при нажатии кнопки повторно
при вызове actionPerformed() куб не пропадает при повторном нажатии, почему не происходит repaint()? public class panel_1 extends...

Repaint() или как вызвать перерисовку компонента
for (i=0; i<arr.length-1; i++) { try { Thread.sleep(300); } catch(InterruptedException e) { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита, которое может. . .
Команды "Заполнить" и "Очистить" на форме документа
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". На примере нетипового документа разработанного в конфигурации КА2. В качестве источника данных указан регистр накопления, в который записываются данные о. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru