Spec-Zone .ru
спецификации, руководства, описания, API
|
Отметьте: Это руководство по развертыванию Java описывает функции, выпущенные до Java SE 6 обновлений 10 выпусков. См. Java Богатый документ Разработки и Развертывания Интернет-приложений для последней информации.
java.lang.ClassCastException
Брошенный От Потока Диспетчеризации События AWT, Когда Мышь Отодвигается Фрейм АпплетаВыполняя апплет в браузере при использовании Sun Среда выполнения Java™ (JRE™) реализация, a java.lang.ClassCastException
бросается от Abstract Window Toolkit (AWT) диспетчеризирующий событие поток, когда мышь отодвигается фрейм апплета, как показано в следующем коде:
java.lang.ClassCastException: sun.plugin....
at MyApplet.mouseExit(Unknown Source)
at java.awt.Component.handleEvent(Unknown Source)
at java.awt.Component.postEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(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.run(Unknown Source)
Апплет работает без любой ошибки с Microsoft Virtual Machine (VM).
У этого исключения есть две возможных причины:
MouseListener
событие на фрейме. В реализации Microsoft VM прямой родитель апплета в иерархическом компонентном дереве AWT является фреймом. Так, некоторые апплеты полагаются на следующий код:public void foo()
{
Frame f = (Frame) getParent();
....
}
getParent()
метод не возвращает a Frame
объект, и вышеупомянутый код приводят к java.lang.ClassCastException
ошибка.java.applet.AppletContext
интерфейс реализуется фреймом апплета. Так, некоторые апплеты полагаются на следующий код:public void foo()
{
Frame f = (Frame) getParent();
....
AppletContext ac = (AppletContext) f;
....
}
Но прямой родитель апплета является определенным для реализации и мог бы измениться. Поскольку Sun реализации JRE AppletContext
используя различный объект, вышеупомянутый код приводит к a java.lang.ClassCastException
.
В первой причине переместитесь по всему иерархическому компонентному дереву AWT от апплета, чтобы определить местоположение фрейма, вместо того, чтобы положиться на фрейм на определенном уровне. Следующий код показывает, как можно переместиться по всему компонентному дереву:
public void foo()
{
// Navigate component tree
Container c = getParent();
while (c != null && (c instanceof Frame) == false)
c = c.getParent();
// Cast Container to Frame
if (c instanceof Frame)
{
Frame f = (Frame) c;
...
}
}
Во второй причине, доступе AppletContext
использование Applet.getAppletContext()
метод как показано в следующем коде:
public void foo()
{
....
AppletContext ac = (AppletContext) getAppletContext();
...
}
Ни один.