Я хочу сделать Die gui, который меняет лицо матрицы каждый раз, когда отображается другое число. У меня есть класс RollDie, который расширяет класс графического интерфейса Die:Die with threads
public class RollDie2 extends Die implements Runnable {
public static void main(String[] args) {
long sleeptime = 500;
int times;
Random rd = new Random();
int face;
int facebefore;
times = rd.nextInt(20)+1;
face = rd.nextInt(6) + 1;
// Graphics
SwingUtilities.invokeLater(new Runnable() {
public void run() {
Die die = new RollDie2();
die.setVisible(true);
}
});
for (int i=0; i<times; i++) {
(new Thread(new RollDie2(face))).start();
try {
Thread.sleep(sleeptime);
} catch (InterruptedException e) {e.printStackTrace();}
sleeptime += 100;
facebefore = face;
face = rd.nextInt(6) + 1;
while (facebefore == face) //so it is different every time
face = rd.nextInt(6) + 1;
}
System.out.println("The die was rolled " + times + " times.");
}
int face;
public RollDie2(int face) {
this.face = face;
super.changeFace(face);
}
public RollDie2() {
}
@Override
public void run() {
System.out.println("The face is now showing: " + face);
}
}
и класс GUI:
public class Die extends JFrame {
int face;
public Die() {
init();
}
private void init() {
//final
DiePanel surface = new DiePanel();
add(surface);
// surface.updateVal(face);
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
Timer timer = surface.getTimer();
timer.stop();
}
});
setTitle("Dice");
setSize(500, 300);
//setLocationRelativeTo(null);
setLayout(new GridLayout(1,3));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void changeFace(int value) {
face = value;
}
public int getFace() {
return face;
}
}
Проблема заключается в каждый раз, когда я называю getFace() в классе панели она ничего не возвращает и я не могу обновить значение Die. Я думаю, что это имеет какое-то отношение к потокам, но не знает, что.
Ваш метод запуска просто выплескивает строку и ничего больше. –
У меня есть invokeLater() вверх. Он создает gui. – Nikola
Да, но все, что делает, это создать объект Die и установить видимость. Когда это действительно катит кости, то есть звоните своему генератору случайных чисел? –