Spec-Zone .ru
спецификации, руководства, описания, API
|
java.lang.NullPointerException
Брошенный От Потока, Когда Applet.start()
или Applet.stop()
ВызываетсяВыполняя апплет в браузере, используя Sun Среда выполнения Java™ (JRE™), a java.lang.NullPointerException
бросается от потока когда Applet.start()
или Applet.stop()
вызывается. Тот же самый апплет работает под Microsoft Virtual Machine (VM).
В Microsoft VM апплет может сразу быть видимым после Applet.init()
вызывается, но прежде Applet.start()
. Точно так же апплет может все еще быть видимым после Applet.stop()
но прежде Applet.destroy()
.
Реализация JRE Sun немного отличается с точки зрения видимости апплета, связанной с методами жизненного цикла, таким образом, любой апплет, который полагается на последовательности события Microsoft VM, может повредиться.
Кодируйте защитно, чтобы гарантировать, что апплет видим перед рисунком. Один способ сделать это должно протестировать ли Graphics
объект является нулем. Например, предположите, что у апплета есть следующие методы:
private Thread paintThread = null;
public void start()
{
if (paintThread == null)
{
paintThread = new Thread(this);
paintThread.start();
}
}
public void stop()
{
if (paintThread != null)
{
paintThread.interrupt(); // Assuming the thread has sufficient // time to be interrupted and stop // drawing before destroy() is called.
paintThread = null;
}
}
public void run()
{
while (Thread.currentThread().isInterrupted() == false)
{
Graphics g = getGraphics();
g.drawString("Hello World", 100, 100); // java.lang.NullPointerException if // applet is not visible -
//g will be null !
}
}
Код для run
метод должен быть изменен на следующее:
public void run()
{
while (Thread.currentThread().isInterrupted() == false)
{
Graphics g = getGraphics();
if (g != null) // Code defensively!
g.drawString("Hello World", 100, 100);
}
}
Ни один.