お世話になります。
只今、Appletの操作を勉強しています。
先日まで動いていた、Appletが急に表示されなくなってしまいました。
「appletviewer」で実行すると表示されるのですが、HTMLを叩くと表示されません。
JAVAコンソールには・・・
java.lang.ClassNotFoundException: javax.swing.JComboBox
at com/ms/vm/loader/URLClassLoader.loadClass (URLClassLoader.java)
at java/lang/ClassLoader.loadClassInternal (ClassLoader.java)
at DemoApplet.init (DemoApplet.java)
at com/ms/applet/AppletPanel.securedCall0 (AppletPanel.java)
at com/ms/applet/AppletPanel.securedCall (AppletPanel.java)
at com/ms/applet/AppletPanel.processSentEvent (AppletPanel.java)
at com/ms/applet/AppletPanel.processSentEvent (AppletPanel.java)
at com/ms/applet/AppletPanel.run (AppletPanel.java)
at java/lang/Thread.run (Thread.java)
・・・と、表示されています。
クラスパスの問題であれば、「appletviewer」でも動かないだろうし・・・何が問題なのでしょうか??
・・・行き詰まってます。
No.1
- 回答日時:
最近Javaから離れている為、勘違いした事を書くかもしれませんがご了承下さい。
>java.lang.ClassNotFoundException: javax.swing.JComboBox
まぁ、見たままなんですが、
SwingパッケージのJComboBoxが見つかりませんよ。と言っているので
最近、環境パスの変更とかファイルの移動とかしていないですか?
実在するSwingパッケージと環境パスが一致しているか確認して下さい。
たぶんそんな事だと思います。ではでは。
No.2
- 回答日時:
本質的なことは、No.1さんがおっしゃるとおりなのですが、
なぜこうなるかというと…。
Swingは1.2から標準でついてきていますが、IEに付属のJavaVMはいまだ1.1です。
したがって、ブラウザについてくるjavaVMでは1.2で追加された機能は使えないわけです。
appletviewerはコンパイル環境のappletviewerを使っていると思うので、
問題なく動作します。
対応策その1:Plug-inを使用する。
ブラウザのVMに頼らず、別途用意したjavaVMを起動するようになります。
Appletを表示する環境にPlug-inを用意してもらう必要がありますが、
最新のjava環境を使うことができます。
利点:最新のjava環境を使用できる
決定:使う人にPlug-inを入れてもらわなければならない。
対応策その2:JDK1.1用のswingを使用する。
サーバにswingのライブラリをおいておけば、
1.1用のSwingに関しては使用可能です。
swingのライブラリをダウロードして使ってもらうことになるため、
利点:クライアントにインストール不要
欠点:でかいswingをダウンロードしなければならない。
参考URL:http://java.sun.com/products/jfc/download.html
この回答への補足
swingのライブラリをダウロードしサーバに追加しましたが、同じ現象になりました。
また、単純なHelloWorldで試したところ・・・
Error loading class: HelloWorld
java.lang.NoClassDefFoundError
java.lang.ClassNotFoundException: HelloWorld
at com/ms/vm/loader/URLClassLoader.loadClass (URLClassLoader.java)
at com/ms/vm/loader/URLClassLoader.loadClass (URLClassLoader.java)
at com/ms/applet/AppletPanel.securedClassLoad (AppletPanel.java)
at com/ms/applet/AppletPanel.processSentEvent (AppletPanel.java)
at com/ms/applet/AppletPanel.processSentEvent (AppletPanel.java)
at com/ms/applet/AppletPanel.run (AppletPanel.java)
at java/lang/Thread.run (Thread.java)
・・・と表示されました。
一番疑問に思うのは、以前に動作していた物が動作しなくなってしまった事です。
No.3
- 回答日時:
ただサーバにおくだけではダメですよ。
Appletを表示するためのHTMLがありますよね。
HTMLにはAppletタグが書いてあり、そこにクラスを検索するパスを記述します。
swingのライブラリをダウンロードしたとのことですが、
それをARCHIVE属性に追加しなければ、ブラウザはどこにあるのか知りようがあり
ません。
こんな感じでしょうか。
<APPLET
CODE="JavaSample.class"
HEIGHT=200
WIDTH=200
CODEBASE="."
ARCHIVE="swingall.jar"
>
</APPLET>
また、補足に書いてある例でうまくいかないのも同様で、
CODE属性に書いてあるクラス(HelloWorld )が、CODEBASEやARCHIVEで指定されたパスから見つからないから、ClassNotFoundExceptionとなるのです。
この回答への補足
CODEBASE="." を追加したら、サーバー上のアプレットは動作しましたがJavaコンソールに・・・
com.ms.security.SecurityExceptionEx[DemoApplet.init]: cannot access file C:\WINDOWS\Java\lib\swing.properties
at com/ms/security/permissions/FileIOPermission.check (FileIOPermission.java)
at com/ms/security/PolicyEngine.deepCheck (PolicyEngine.java)
at com/ms/security/PolicyEngine.checkPermission (PolicyEngine.java)
at com/ms/security/StandardSecurityManager.chk (StandardSecurityManager.java)
at com/ms/security/StandardSecurityManager.checkRead (StandardSecurityManager.java)
at java/io/FileInputStream.<init> (FileInputStream.java)
at java/io/FileInputStream.<init> (FileInputStream.java)
at javax/swing/UIManager$3.run (UIManager.java:754)
at javax/swing/SwingUtilities.doPrivileged (SwingUtilities.java:1611)
at javax/swing/UIManager.loadSwingProperties (UIManager.java:770)
at javax/swing/UIManager.initialize (UIManager.java:919)
at javax/swing/UIManager.maybeInitialize (UIManager.java:945)
at javax/swing/UIManager.getUI (UIManager.java:560)
at javax/swing/JPanel.updateUI (JPanel.java:110)
at javax/swing/JPanel.<init> (JPanel.java:66)
at javax/swing/JPanel.<init> (JPanel.java:99)
at DemoApplet.init (DemoApplet.java:28)
at com/ms/applet/AppletPanel.securedCall0 (AppletPanel.java)
at com/ms/applet/AppletPanel.securedCall (AppletPanel.java)
at com/ms/applet/AppletPanel.processSentEvent (AppletPanel.java)
at com/ms/applet/AppletPanel.processSentEvent (AppletPanel.java)
at com/ms/applet/AppletPanel.run (AppletPanel.java)
at java/lang/Thread.run (Thread.java)
com.ms.security.SecurityExceptionEx[DemoApplet.init]: Event queue access denied.
at com/ms/security/permissions/UIPermission.check (UIPermission.java)
at com/ms/security/PolicyEngine.deepCheck (PolicyEngine.java)
at com/ms/security/PolicyEngine.checkPermission (PolicyEngine.java)
at com/ms/security/StandardSecurityManager.chk (StandardSecurityManager.java)
at com/ms/security/StandardSecurityManager.checkAwtEventQueueAccess (StandardSecurityManager.java)
at java/awt/Toolkit.getSystemEventQueue (Toolkit.java)
at javax/swing/SystemEventQueueUtilities$SystemEventQueue.init (SystemEventQueueUtilities.java:134)
at javax/swing/SystemEventQueueUtilities$SystemEventQueue.get (SystemEventQueueUtilities.java:82)
at javax/swing/SystemEventQueueUtilities.postRunnable (SystemEventQueueUtilities.java:269)
at javax/swing/SwingUtilities.invokeLater (SwingUtilities.java:1128)
at javax/swing/JComponent.revalidate (JComponent.java:3383)
at javax/swing/JViewport.setView (JViewport.java:692)
at javax/swing/JScrollPane.setViewportView (JScrollPane.java:831)
at javax/swing/JScrollPane.<init> (JScrollPane.java:211)
at javax/swing/plaf/basic/BasicComboPopup.createScroller (BasicComboPopup.java:346)
at javax/swing/plaf/basic/BasicComboPopup.<init> (BasicComboPopup.java:223)
at javax/swing/plaf/metal/MetalComboBoxUI$MetalComboPopup.<init> (MetalComboBoxUI.java:42)
at javax/swing/plaf/metal/MetalComboBoxUI.createPopup (MetalComboBoxUI.java:67)
at javax/swing/plaf/basic/BasicComboBoxUI.installUI (BasicComboBoxUI.java:122)
at javax/swing/plaf/metal/MetalComboBoxUI.installUI (MetalComboBoxUI.java:52)
at javax/swing/JComponent.setUI (JComponent.java:260)
at javax/swing/JComboBox.setUI (JComboBox.java:144)
at javax/swing/JComboBox.updateUI (JComboBox.java:153)
at javax/swing/JComboBox.init (JComboBox.java:116)
at javax/swing/JComboBox.<init> (JComboBox.java:110)
at DemoApplet.init (DemoApplet.java:32)
at com/ms/applet/AppletPanel.securedCall0 (AppletPanel.java)
at com/ms/applet/AppletPanel.securedCall (AppletPanel.java)
at com/ms/applet/AppletPanel.processSentEvent (AppletPanel.java)
at com/ms/applet/AppletPanel.processSentEvent (AppletPanel.java)
at com/ms/applet/AppletPanel.run (AppletPanel.java)
at java/lang/Thread.run (Thread.java)
Swing: checked access to system event queue.
・・・と表示されました・・・これはIE上の問題なのですかね??
でも、動作はしましたので、ありがとうございます。
・・・ただ、デスクトップの「HelloWorld」は相変わらずです。
No.4
- 回答日時:
なにをするアプレットなのか教えてくれませんか?
エラーがでたら、そのスタックトレースから原因を判明させませしょう。
at DemoApplet.init (DemoApplet.java:28)
とあるので、DemoApplet.javaの28行目でなにをしていますか?
ここで行やっていることに対して、
「cannot access file」とエラーが発生しているのです。
アプレットでは通常セキュリティ上、ローカルファイルのアクセスはできません。
このアプレットでローカルファイルのアクセスをしているのではないですか?
アプレットビューワでは、たぶんこのセキュリティの制限がないです。
>ただ、デスクトップの「HelloWorld」は相変わらずです。
デスクトップというのはどういうことでしょう?
デスクトップにファイルを置いているということでしょうか?
どういったファイル構成で、なにを動かしているのか分からないので、
もうすこし情報をください。
・HTML中のアプレットタグの内容
・HTML,classファイルの配置構成
・起動方法
など
この回答への補足
お世話かけます・・・
これは基本画面はボタン、コンボボックスで、ボタンをクリックでサーブレットを実行させるアプレットです。
DemoApplet.javaの28行目は・・・
panel = new JPanel();
・・・でした。
一応、前後の行は・・・
public void init(){
panel = new JPanel();
panel.setLayout(new GridLayout(7,1));
・・・こんな感じです。
ローカルファイルにアクセスしてる所は無いと思います。
・HTML中のアプレットタグの内容
<applet code="DemoApplet.class" width = 300 height = 300 codebase="."> </applet>
・HTML,classファイルの配置構成
同じディレクトリです。
・起動方法
Webサーバ(Tomcat3.2.3)を起動してます。
・環境
Tomcat3.2.3
JDK1.3
Windows2000
>デスクトップというのはどういうことでしょう?
>デスクトップにファイルを置いているということでしょうか?
はい。「HelloWorld」はデスクトップに置いてありましたが、今はC:\Javaに置いてあります・・・結果は同じです。
以上です。
・・・本当にお世話様です。
No.5
- 回答日時:
swingのライブラリが、ARCHIVE属性にないのですが、書き忘れでしょうか?
それがないと、最初の質問である。
java.lang.ClassNotFoundException: javax.swing.JComboBox
になると思うのですが…。
あとコンストラクタに、
以下の2行を追加してみてください。
JRootPane rp = myJApplet.getRootPane();
rp.putClientProperty("defeatSystemEventQueueCheck", Boolean.TRUE);
この情報は、swing1.1のドキュメントにありました。
http://java.sun.com/products/jfc/swingdoc-api-1. …
アプレットを動かすときはどうやって起動していますか?
・HTMLファイルをダブルクリック
これはやめたほうがいいです。正常に動くかもしれませんが、ローカルファイルのアクセスと同じ結果になるかもしれません。
・ブラウザからtomcat経由で起動
ブラウザのURLにhttp://tomcatのURL/xxxx/xxx.html
というような形で、httpで指定して動かしたほうがいいと思います。
これでスタックトレースはちょっと減るかと思います。
この回答への補足
お世話になります。
何故かARCHIVE属性が無い状態で動作しました。
CODEBASEのみ追加でOKだったみたいです。
JRootPane rp = myJApplet.getRootPane();
rp.putClientProperty("defeatSystemEventQueueCheck", Boolean.TRUE);
は、このDemoAppletはAppletを直に継承しているのでコンパイルエラーになってしまいました。
JAppletを継承しなおしたところ、コンパイルは通りましたが実行で以下のエラーが表示されました。
com.ms.security.SecurityExceptionEx[DemoApplet.<init>]: cannot access file C:\WINDOWS\Java\lib\swing.properties
at com/ms/security/permissions/FileIOPermission.check (FileIOPermission.java)
at com/ms/security/PolicyEngine.deepCheck (PolicyEngine.java)
at com/ms/security/PolicyEngine.checkPermission (PolicyEngine.java)
at com/ms/security/StandardSecurityManager.chk (StandardSecurityManager.java)
at com/ms/security/StandardSecurityManager.checkRead (StandardSecurityManager.java)
at java/io/FileInputStream.<init> (FileInputStream.java)
at java/io/FileInputStream.<init> (FileInputStream.java)
at javax/swing/UIManager$3.run (UIManager.java:754)
at javax/swing/SwingUtilities.doPrivileged (SwingUtilities.java:1611)
at javax/swing/UIManager.loadSwingProperties (UIManager.java:770)
at javax/swing/UIManager.initialize (UIManager.java:919)
at javax/swing/UIManager.maybeInitialize (UIManager.java:945)
at javax/swing/UIManager.getUI (UIManager.java:560)
at javax/swing/JPanel.updateUI (JPanel.java:110)
at javax/swing/JPanel.<init> (JPanel.java:66)
at javax/swing/JPanel.<init> (JPanel.java:99)
at javax/swing/JRootPane.createGlassPane (JRootPane.java:224)
at javax/swing/JRootPane.<init> (JRootPane.java:181)
at javax/swing/JApplet.createRootPane (JApplet.java:132)
at javax/swing/JApplet.<init> (JApplet.java:125)
at DemoApplet.<init> (DemoApplet.java:24)
at com/ms/applet/BrowserAppletFrame.newInstance (BrowserAppletFrame.java)
at com/ms/applet/AppletPanel.processSentEvent (AppletPanel.java)
at com/ms/applet/AppletPanel.processSentEvent (AppletPanel.java)
at com/ms/applet/AppletPanel.run (AppletPanel.java)
at java/lang/Thread.run (Thread.java)
java.lang.Error: Do not use DemoApplet.add() use DemoApplet.getContentPane().add() instead
at javax/swing/JApplet.createRootPaneException (JApplet.java:208)
at javax/swing/JApplet.addImpl (JApplet.java:230)
at java/awt/Container.add (Container.java)
at DemoApplet.init (DemoApplet.java:71)
at com/ms/applet/AppletPanel.securedCall0 (AppletPanel.java)
at com/ms/applet/AppletPanel.securedCall (AppletPanel.java)
at com/ms/applet/AppletPanel.processSentEvent (AppletPanel.java)
at com/ms/applet/AppletPanel.processSentEvent (AppletPanel.java)
at com/ms/applet/AppletPanel.run (AppletPanel.java)
at java/lang/Thread.run (Thread.java)
No.6
- 回答日時:
あと、書き忘れたのですが…。
ブラウザのVM、つまりJDK1.1ベースで動作させるつもりなら、
コンパイルもJDK1.1でしたほうがいいですよ。
JDK1.3で新たに追加された機能を知らずに使っても、
コンパイルエラーにならずに、実行時にエラーになりますから。
No.7
- 回答日時:
複数の問題が山積みで原因が特定できないのですが、
ひとつずつ解決していきませんか?
まずは単純なサンプルを動作させてください。そのサンプルに処理を徐々に加えて、
現在のプログラムに近づけていくと、どこかで問題が発生するでしょう。
発生したときに加えてた処理=問題の原因です。
私は以下のようなプログラムで、JDK1.1ベースのswingが動作します。
tnishiokaはこのサンプルが動作しますか?
また、このサンプルにどんな処理を加えると、問題が発生しますか?
--------------------
■TestApplet.java
import com.sun.java.swing.*;
public class AppletTest extends JApplet{
public AppletTest(){
JRootPane rp = this.getRootPane();
rp.putClientProperty("defeatSystemEventQueueCheck", Boolean.TRUE);
this.getContentPane().add(new JButton("JButton"));
}
}
--------------------
■Test.html
<HTML>
<applet
codebase="."
code="AppletTest"
archive="swingall.jar"
width=100
height=100
>
</applet>
</HTML>
--------------------
■ファイル構成(以下の3つのファイルが同一ディレクトリ)
Test.html
AppletTest.class
swingall.jar
--------------------
■コンパイル(JDK1.1ではないので、targetオプション付加)
javac -target 1.1 -classpath swingall.jar AppletTest.java
--------------------
archiveを追加せずに動作するのはおかしいと思います。
plug-inを使っているのではないですよね?
→Appletが動作するときにタスクトレイにPlug-inのアイコンが表示されますか?
swingall.jarのアーカイブを"展開して"codebaseと同じディレクトリに置いていたりしますか?
→それならば動作すると思います。
この回答への補足
本当にお世話になります。
・・・コンパイルが通りませんでした。
C:\java\applet>javac -target 1.1 -classpath swingall.jar AppletTest.java
AppletTest.java:1: パッケージ com.sun.java.swing は存在しません。
import com.sun.java.swing.*;
^
AppletTest.java:3: シンボルを解釈処理できません。
シンボル: クラス JApplet
位置 : AppletTest の クラス
public class AppletTest extends JApplet{
^
AppletTest.java:5: シンボルを解釈処理できません。
シンボル: クラス JRootPane
位置 : AppletTest の クラス
JRootPane rp = this.getRootPane();
^
AppletTest.java:5: シンボルを解釈処理できません。
シンボル: メソッド getRootPane ()
位置 : AppletTest の クラス
JRootPane rp = this.getRootPane();
^
AppletTest.java:7: シンボルを解釈処理できません。
シンボル: クラス JButton
位置 : AppletTest の クラス
this.getContentPane().add(new JButton("JButton"));
^
AppletTest.java:7: シンボルを解釈処理できません。
シンボル: メソッド getContentPane ()
位置 : AppletTest の クラス
this.getContentPane().add(new JButton("JButton"));
^
エラー 6 個
No.8ベストアンサー
- 回答日時:
>AppletTest.java:1: パッケージ com.sun.java.swing は存在しません。
import com.sun.java.swing.*;
パッケージ com.sun.java.swingは、swingall.jarにあります。
>javac -target 1.1 -classpath swingall.jar AppletTest.java
のように指定しているようですが、
C:\java\appletに、swingall.jarはありますか?
私が示している例を、分からないまま、そのまま実行するのではなく、
自分の環境に合わせて実行してくださいね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- JavaScript [Java] Edgeでのアドレスバー非表示について 3 2022/04/20 17:51
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- Java javaについて 4人の名前と年齢をコンソールに入力して、指定した名前の年齢を表示したいです! よろ 1 2022/06/10 17:12
- Java javaの質問です 3人の名前をコンソールに入力して名前を表示。 3人目、入力後に「何番目の名前を表 1 2022/06/09 17:42
- Java Javaで2の0乗から-8乗まで表示するプログラムが分かりません… 教えていただけませんか? 4 2023/06/03 20:53
- Java JavaでWebページ作成 7 2023/07/21 21:09
- Java mac mini 2009 でのmac OS における Java の入れ替えについて 1 2022/12/27 19:23
- C言語・C++・C# C#の基本文法が詳しく書かれている教科書的な本ありますか 2 2023/02/11 03:48
- ゲーム Ps5で、マイクラJava版って出来ますか?今マイクラ統合版でやってて、マイクラJava版もやってみ 1 2023/02/07 20:25
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Javaでのエラーについて
-
java と javax の違いは?
-
CLASSPATHを設定しても、『Clas...
-
vba クリップボードクリアにつ...
-
JSPファイルで生じるエラーをど...
-
Pythonを無料(安価)で学ぶ方...
-
gitでバージョン指定してダウン...
-
IISワーカープロセスが原因でCP...
-
Window CE でJava appletは使え...
-
エクリプスのプログラミングに...
-
EclipseとVisual StudioをPC1台...
-
文字列に半角スペースがあるか...
-
プログラムの起動、利用につい...
-
MSFormsとは何ですか?
-
javaでの#if 0 #endif文
-
Webアプリケーションを開発する...
-
MSCOMCTL.OCXのアップデートの方法
-
サイドワインダーのドライバ
-
SQLでデータベースから返ったデ...
-
UnknownHostException
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Javaでのエラーについて
-
java と javax の違いは?
-
propertiesが読み込めなくてnul...
-
javacのコンパイルでファイルが...
-
JAVA実行時エラーについて教え...
-
javaからデータベースに接続 エ...
-
CLASSPATHを設定しても、『Clas...
-
struts2環境構築で不具合が出て...
-
Tomcatでエラー
-
マイクラ1.7.10にcutallなどが...
-
javaのGUIツールキット
-
log4jを使用し、JAVAのバッチプ...
-
マイクラ Ender IO 入れたらク...
-
-Applet表示でのjava.lang.Clas...
-
javaサーブレット upload時
-
JavaMail関係でエラーが出ます
-
JasperExceptionのエラーログの...
-
AntでのJunitの試験
-
マイクラがクラッシュします。
-
Tomcat上で動くサーブレットが...
おすすめ情報