https://github.com/terryaa/KOSTA_MAC/tree/master/Java/NetBeans/day13_01_15/src/ex1
То, что я пытаюсь сделать, это рисовать круги, но по одному кругу на холсте, а затем переходить к рисованию следующего круга с помощью Runnable join.Он должен нарисовать круг с помощью .start (), а другой .start () не должен начинаться до тех пор, пока формальный круг .start () не будет завершен.
В пакете на связанной странице класс Ex3_Canvas1 имеет main и использует класс Runnable MyThread0, чтобы нарисовать круг, используя basic .start () и .join (), и он отлично выполняет то, что я хочу.
Я создал автоматический класс JFrame в NetBean Ex2_CanvasDemo и попытался сделать то же самое, но потерпел неудачу.Окно JFrame появляется после рисования полного круга, а затем показывает создание следующего круга.Я хочу, чтобы сначала появилось окно, и оно показывает создание обоих кругов, не одновременно, а последовательно, как Ex3_Canvas1.
Я полагаю, это потому, что основной поток ожидает завершения th (Ex2_CanvasDemo), поэтому окно не применяется для изменений.Но не должен ли Ex1_Canvas1 делать то же самое?Это связано с тем, что netbeans автоматически генерирует код?Как я могу сделать так же, как Ex1_Canvas1 в Ex2_CanvasDemo.
Я пытался создать класс Runnable и использовал его в Ex2_CanvasDemo, но тоже не получилось ..
Любая помощь?Я использую JDK 8 и NetBeans8 на Mac.
- Часть потока Ex2_CanvasDemo -
public Ex2_CanvasDemo() {
initComponents();
Thread th=new Thread(new Runnable() {
@Override
public void run() {
for(int i=0;i<370;i+=10){
try {
Thread.sleep(100);
} catch (InterruptedException ex) {
Logger.getLogger(Ex2_CanvasDemo.class.getName()).log(Level.SEVERE, null, ex);
}
arcNUm=i;
System.out.println("circle"+arcNUm);
canvas1.repaint();
}
}
});
th.start();
try {
th.join();
} catch (InterruptedException ex) {
Logger.getLogger(Ex2_CanvasDemo.class.getName()).log(Level.SEVERE, null, ex);
}
th=new Thread(new Runnable() {
@Override
public void run() {
for(int i=0;i<370;i+=10){
System.out.println("circle"+i);
try {
Thread.sleep(100);
} catch (InterruptedException ex) {
Logger.getLogger(Ex2_CanvasDemo.class.getName()).log(Level.SEVERE, null, ex);
}
arcNum2=i;
canvas2.repaint();
}
}
});
th.start();
// try {
// th.join();
// } catch (InterruptedException ex) {
// Logger.getLogger(Ex2_CanvasDemo.class.getName()).log(Level.SEVERE, null, ex);
// }
}