次の手順で問題を示すことから始めましょう。
Internet Explorer 9 と実際のブラウザー (Firefox または Chrome) で Java アプレットをロードする Web ページを開きます。たとえば、http://javatester.org/version.htmlを使用してみましょう。
JavaScript コンソールで次のコードを実行します。
j = document.applets[0].Packages; image = new j.java.awt.image.BufferedImage(256, 256, 2); image.getWidth();
これは Firefox と Chrome で機能し、正しい画像幅 256 を出力します。ただし、Internet Explorer では失敗し、2 行目に次のエラー メッセージが表示されます。
"java.lang.IllegalArgumentException: No method found matching name java.awt.image.BufferedImage and arguments []"
これが失敗する理由は何ですか?デフォルトのコンストラクターを持つ他の Java クラスをインスタンス化することができました。したがって、このコードは正しく機能します。
new j.java.util.Random().nextInt()
では、Internet Explorer または Java プラグインには、コンストラクターに引数を渡すバグがあるのでしょうか? エラー メッセージは、IE が引数なしでコンストラクターを呼び出そうとしているように聞こえます (そして、BufferedImage には既定のコンストラクターがありません)。
この問題を理解したり、修正したり、回避策を見つけたりするのに役立つ情報 (おそらく既存のバグ レポート) に興味があります。この質問は、JavaScript からの Java オブジェクトのインスタンス化に関するものであり、画像の作成方法に関するものではないことに注意してください。したがって、Canvas の使用に関する回答はご遠慮ください。