アプリ版:「スタンプのみでお礼する」機能のリリースについて

お世話になります。

只今、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」でも動かないだろうし・・・何が問題なのでしょうか??

・・・行き詰まってます。

A 回答 (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はありますか?

私が示している例を、分からないまま、そのまま実行するのではなく、
自分の環境に合わせて実行してくださいね。

この回答への補足

お世話になります。

swingall.jarはあります。

再度、コンパイルしましたが・・・無理でした。

補足日時:2002/08/09 18:07
    • good
    • 0

複数の問題が山積みで原因が特定できないのですが、


ひとつずつ解決していきませんか?
まずは単純なサンプルを動作させてください。そのサンプルに処理を徐々に加えて、
現在のプログラムに近づけていくと、どこかで問題が発生するでしょう。
発生したときに加えてた処理=問題の原因です。

私は以下のようなプログラムで、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 個

補足日時:2002/08/09 14:42
    • good
    • 0

あと、書き忘れたのですが…。


ブラウザのVM、つまりJDK1.1ベースで動作させるつもりなら、
コンパイルもJDK1.1でしたほうがいいですよ。
JDK1.3で新たに追加された機能を知らずに使っても、
コンパイルエラーにならずに、実行時にエラーになりますから。
    • good
    • 0

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)

補足日時:2002/08/06 16:02
    • good
    • 0

なにをするアプレットなのか教えてくれませんか?



エラーがでたら、そのスタックトレースから原因を判明させませしょう。
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に置いてあります・・・結果は同じです。

以上です。
・・・本当にお世話様です。

補足日時:2002/08/06 14:03
    • good
    • 0

ただサーバにおくだけではダメですよ。


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」は相変わらずです。

補足日時:2002/08/06 10:15
    • good
    • 0

本質的なことは、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)

・・・と表示されました。

一番疑問に思うのは、以前に動作していた物が動作しなくなってしまった事です。

補足日時:2002/08/05 11:23
    • good
    • 0

最近Javaから離れている為、勘違いした事を書くかもしれませんがご了承下さい。



>java.lang.ClassNotFoundException: javax.swing.JComboBox
まぁ、見たままなんですが、
SwingパッケージのJComboBoxが見つかりませんよ。と言っているので
最近、環境パスの変更とかファイルの移動とかしていないですか?

実在するSwingパッケージと環境パスが一致しているか確認して下さい。
たぶんそんな事だと思います。ではでは。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!