Идея такая: есть скрытая GIF'ка. при нажатии на кнопку, она становится видимой, пауза в пару секунд, GIF'ка опять становится невидимой и происходит изменения в окне. Пытался это сделать - во время паузы не работает гиф (не видно, что она появляется и исчезает). решил сделать через поток след образом:
shar_img_gif.setVisible(true);
Thread s1 = new Thread(new Runnable(){
public void run(){
try {
Thread.sleep(1000);
shar_img_gif.setVisible(false);
int i = (int)(Math.random()*o.x);
shar_otv1.setText(o.otv[i]);
shar_vopros.setText(shar_text.getText()+"?");
shar_text.setText(null);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
s1.start();
но начинает ругаться на 2 эти строки:
shar_otv1.setText(o.otv[i]);
shar_vopros.setText(shar_text.getText()+"?");
если вынести их за пределы потока - все будет работать, но не так как надо (выполняется сразу, а надо чтобы этот кусок работал после паузы, когда GIF'ка исчезнет).
эти 2 строки не хотят работать просто в потоке. как это исправить? и почему так происходит?
Используйте Timer:
shar_img_gif.setVisible(true);
javax.swing.Timer timer = new javax.swing.Timer(1000/*Time in millis*/,e->
{
Platform.runLater(()->
{
shar_img_gif.setVisible(false);
int i = (int)(Math.random()*o.x);
shar_otv1.setText(o.otv[i]);
shar_vopros.setText(shar_text.getText()+"?");
shar_text.setText(null);
}/*Runnable*/);
}/*ActionListener*/);
timer.setRepeats(false);
timer.start();
Исключение появляется так, как работа с JavaFX должна проиводиться в JavaFX потоке, для этого нужно использовать
Platform.runLater(()->
{
//Your code there
});
()->{} - это лямбда выражение, добавленное в java 8, оно заменяет new Runnable(){}
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости