Napisałem prosty aplet. Uruchamiając go czasami wyskakuje na konsoli komunikat o wyjątku NullPointerException. Uruchmiam zawsze ten sam program a wyjątek raz się pojawia a raz nie. Wyjątej jak się pojawia to po zamknięciu okna Applet Viewer. Jak należy rozumieć tę nieregularność w występowaniu wyjątku? Proszę o podpowiedzi. Z góry dziękuję
- Podaj adres gdzie to masz umieszczone. popatrzymy
- NullPointer oznacza iż któraś ze zmiennych nie ma wartości.
- zamieść to co leci na konsoli. Stacktrace - opis błedu
W sieci jeszcze tego nie umieśćiłem. Kod wygląda następująco
package mypak;
import java.awt.*;
import java.applet.*;
public class Lissajous extends Applet {
/**
*
*/
private static final long serialVersionUID = 1L;
final static int APPWIDTH = 300, // applet dimensions
APPHEIGHT = 200;
Color bgColor = new Color(200, 240, 100); // background colour
public void init() {
setBackground(bgColor);
}
public void paint(Graphics screen) {
Graphics2D g = (Graphics2D) screen;
g.setColor(Color.black);
g.drawRect(0, 0, APPWIDTH, APPHEIGHT); // ractangle
g.drawLine(APPWIDTH / 2, 0, APPWIDTH / 2, APPHEIGHT); // horizontal
// line
g.drawLine(0, APPHEIGHT / 2, APPWIDTH, APPHEIGHT / 2); // vertical line
BasicStroke pen = new BasicStroke(4.0f, BasicStroke.CAP_BUTT,
BasicStroke.JOIN_ROUND);
for (int x = APPWIDTH / 2; x < APPWIDTH + 500; x++) {
// g.drawLine(x, f(x), x+1, f(x+1));
g.setStroke(pen);
g.drawLine(f(x, 0.01, 1.5) + APPWIDTH / 8, f(x, 0.03, 0.0), f(
x + 1, 0.01, 1.5)
+ APPWIDTH / 8, f(x + 1, 0.03, 0.0));
}
}
int f(int wspX, double omega, double faza) {
double x = (double) wspX;
return (int) (APPHEIGHT / 2 * (-Math.sin(omega * x + faza)))
+ APPHEIGHT / 2;
}
}
Natomiast błąd
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException: component argument pData
at sun.awt.windows.Win32SurfaceData.initOps(Native Method)
at sun.awt.windows.Win32SurfaceData.<init>(Unknown Source)
at sun.awt.windows.Win32SurfaceData.createData(Unknown Source)
at sun.awt.Win32GraphicsConfig.createSurfaceData(Unknown Source)
at sun.awt.windows.WComponentPeer.replaceSurfaceData(Unknown Source)
at sun.awt.windows.WComponentPeer.replaceSurfaceData(Unknown Source)
at sun.awt.windows.WComponentPeer$2.run(Unknown Source)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Jak często ci błąd wyrzuca bo u mnie jest ok.
Nie często raz za czas. OK 2 na 10 uruchomień. Korzystam z eclipse.
Hym mialem podobne problemy w Netbeansie umnie chodzilo o to ze program byl jeszcze uruchomiony:| i recznie go musialem wylaczac
pozdr.
Dziwne u mnie nie ma żadnych problemów? Może masz coś nie tak z wersją jre.
Jest to Bug w Core Javy:
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=5062191
i duplikat:
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=5098186
Co w takim przypadku się robi? Należy zignorować problem czy obsługiwać w jakiś sposób ten wyjątek?
Nic się nie robi. Podobnie błąd nie powinien pojawić się na maszynach z jednym procesorem. Niestety pojawił się też w 1.6 Mustang i chyba szybko nie zniknie...
Dzięki za wyjaśnienia.