Witam,
Pomogliście ostatnim razem, teraz też nie wiem jak coś zrobić. Próbuję już 2 dzień i nic nie pomaga :/
Mam nadzieję ,że mogę na was liczyć :)
Do rzeczy:
Moja klasa testowa MyPanel:
package my;
import java.awt.Graphics;
public class MyPanel extends javax.swing.JPanel implements Runnable {
boolean draw = false;
Thread t;
int x;
int y;
int counter = 0;
public synchronized void getValue(boolean TrueOrFalse){
draw = TrueOrFalse;
notify();
}
@Override
public void addNotify() {
super.addNotify();
t = new Thread(this);
t.start();
}
@Override
public synchronized void run(){
do{
try {
while(!draw)
wait();
} catch (InterruptedException exc){}
repaint();
counter++;
x = 0 + (int)(Math.random()*50);
y = 0 + (int)(Math.random()*50);
try {
Thread.sleep(300);
} catch(InterruptedException ex) {
Thread.currentThread().interrupt();
}
}while(true);
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
//doDrawing(g);
//g.drawLine(x, y, x, y);
g.fillRect(x, y, 10, 10);
}
}
W głównej klasie programu usiłuję wywołać zmianę zmiennej "draw" z klasy MyPanel za pośrednictwem metody getValue.
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
jPanel1.getValue(true);
}
Niestety, kliknięcie przycisku powoduje następujący komunikat błędu:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at my.JPanel_Thread.jButton1ActionPerformed(JPanel_Thread.java:64)
at my.JPanel_Thread.access$000(JPanel_Thread.java:4)
at my.JPanel_Thread$1.actionPerformed(JPanel_Thread.java:35)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6505)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
at java.awt.Component.processEvent(Component.java:6270)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2719)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:694)
at java.awt.EventQueue$3.run(EventQueue.java:692)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:708)
at java.awt.EventQueue$4.run(EventQueue.java:706)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
Chciałem dodać ,że jeśli zmienna "draw" w MyPanel zostanie domyślnie ustawiona na "true" to odtwarza się animacja zgodnie z moją intencją. Chciałem mieć jednak możliwość zatrzymywania i puszczania animacji dalej a w przyszłości także zmianę parametrów.
Niestety powyższy błąd uniemożliwia mi to :/
Proszę, powiedzcie mi co robię źle.
Pozdrawiam
ps. Java uczę się sam od około 2-3tyg i niestety nie mam dostępu do wykwalifikowanej w Java kadry. (na mojej uczelni nie ma zajęć z Java) :(