注: この Java 配備ガイドでは、Java SE 6 update 10 リリースより前にリリースされた機能について説明します。最新情報については、Java Rich Internet Application の開発および配備を参照してください。

アプレットのフレーム上でマウスを動かすと AWT イベントディスパッチスレッドから java.lang.ClassCastException がスローされる

症状

Sun Java™ Runtime Environment (JRE™) 実装を使ってブラウザ内でアプレットを実行しているときにアプレットのフレーム上でマウスを動かすと、次のコードに示すように、Abstract Window Toolkit (AWT) イベントディスパッチスレッドから java.lang.ClassCastException がスローされます。

        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) ではアプレットは何のエラーもなく実行されます。

原因

この例外には、考えられる原因が 2 つあります。

解決方法

原因が最初のものである場合、特定レベルのフレームに依存する代わりに、アプレットから 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;
               ...
      }
}

原因が 2 番目のものである場合、次のコードに示すように、Applet.getAppletContext() メソッドを使って AppletContext にアクセスします。

        public void foo()
    {
         ....
         AppletContext ac = (AppletContext) getAppletContext();
         ...
    }

 

詳細情報

        なし。


Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.