
お世話になります。
只今、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.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はありますか?
私が示している例を、分からないまま、そのまま実行するのではなく、
自分の環境に合わせて実行してくださいね。
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.6
- 回答日時:
あと、書き忘れたのですが…。
ブラウザのVM、つまりJDK1.1ベースで動作させるつもりなら、
コンパイルもJDK1.1でしたほうがいいですよ。
JDK1.3で新たに追加された機能を知らずに使っても、
コンパイルエラーにならずに、実行時にエラーになりますから。
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.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.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.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.1
- 回答日時:
最近Javaから離れている為、勘違いした事を書くかもしれませんがご了承下さい。
>java.lang.ClassNotFoundException: javax.swing.JComboBox
まぁ、見たままなんですが、
SwingパッケージのJComboBoxが見つかりませんよ。と言っているので
最近、環境パスの変更とかファイルの移動とかしていないですか?
実在するSwingパッケージと環境パスが一致しているか確認して下さい。
たぶんそんな事だと思います。ではでは。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
struts2環境構築で不具合が出て...
-
プログラミングのプの字も知り...
-
sourceforge.jpのソースコード...
-
EclipseでJavaコンパイラのバー...
-
作ったアプレットを自動でアプ...
-
VB.netでxml-rpcの使用は可能??
-
C言語入門サイトについて
-
ウインドウズメディアプレーヤ...
-
realPlayerについて教えてくだ...
-
超恥愚問ですが、CとC++の間に...
-
Pythonを使った機械学習を勉強...
-
【VB.NET】事後バインディング...
-
RealPlayer 8以前のプレイヤー...
-
ソーティングについて
-
unzip32.dllの利用について(64b...
-
TOMCATとANDROIDSTUDIOの違い
-
コマンドボタンの文字が消える!
-
イラストレーター CS4の体験...
-
ホームページビルダー スタイ...
-
!と~について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Javaでのエラーについて
-
javaからデータベースに接続 エ...
-
struts2環境構築で不具合が出て...
-
java と javax の違いは?
-
Fileクラス
-
Javaにてシリアル通信を行って...
-
Tomcatでエラー
-
クラスパスがとおりません。
-
DBから全権検索したデータをjsp...
-
FirefoxでJava Appletが表示で...
-
oracle9iにJDBC接続が出来ない
-
WebAPIをJavaScriptで利用できる?
-
これをjavaとGUIを使って作りた...
-
javaアプレットでゲームを作り...
-
アプレットとテキストファイル
-
JSFで、マネージビーンに画面の...
-
JNIでロードするライブラリが見...
-
CPUの個数
-
一斉コンパイルのバッチファイ...
-
execでdirコマンドを実行すると...
おすすめ情報