とあるサイトからJDK1.3と次のようなサンプルソースを
入手しました。
-------------------------------------------------
import java.awt.Frame;

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Shape;
import java.awt.geom.*;

public class GeomLine extends Frame {

public GeomLine() {
super("Geometry Test");
}

public void paint(Graphics g) {
// Graphics2Dの取得
Graphics2D g2 = (Graphics2D)g;
// 描画図形の決定
Shape s = new Line2D.Float(10.0f, 50.0f,
90.0f, 150.0f);
// アウトラインの描画
g2.draw(s);
}
public static void main(String[] args) {
Frame f = new GeomLine();
f.setSize(100,200);
f.setVisible(true);
}
}
-------------------------------------------------
以上のようなサンプルソースをJKD1.3でコンパイルを行い、
appletviewerで上ソースをコンパイルしたclassファイルを
コールしているHTML文を動かしてみたところ、以下のような
メッセージが出てしまい、アプレットウィンドウは表示された
ものの何も空白のウィンドウになってしまいました。
-------------------------------------------------
C:\JAVA_S~1\ex2>appletviewer ex02.htm
java.lang.ClassCastException: GeomLine
at sun.applet.AppletPanel.createApplet(AppletPanel.java:579)
at sun.applet.AppletPanel.runLoader(AppletPanel.java:515)
at sun.applet.AppletPanel.run(AppletPanel.java:293)
at java.lang.Thread.run(Thread.java:484)
-------------------------------------------------
上記エラーを解消するにはどのようにしたらよろしいのでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (2件)

public static void main(String[] args)で始まるものはアプレットではなくアプリケーションです。


アプリケーションをappletviewerで見ようとしてもおそらく見ることができないと思います。
MS-DOSからコマンドをたたいて実行されているなら

アプレット(appletviewer)の実行→appletviewer HTMLファイル名
アプリケーションとしての実行  →java クラス名

となります。参考URLにアプレットとアプリケーションのコードについて説明がありますので
よろしかったら参考にご覧下さいませ。

参考URL:http://www.gimlay.org/~andoh/hatena/java/S002.ht …
    • good
    • 0

GeomLine を Frame にキャストできないよ、といっているように見えます。



あまり自信はないのですが、mainメソッドの1行目を
GeomLine f = new GeomLine();
に変えると例外は出なくなりますかね?

この回答への補足

ご回答ありがとうございます。
ご指摘の通り私の方で再度やってみたのですが、
メッセージは以前のままで改善されてないようでした。
自分もjavaの初心者なので、あまり詳しいところまで
わかりませんが、ヘッダ上にあるimportするパッケージが
無い場合とか不正である場合にはこのようなメッセージは
表示されるものなのでしょうか?

補足日時:2001/01/05 13:10
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

このQ&Aと関連する良く見られている質問

QAppletのpublic void paint(Graphics g)

は抽象クラスのGraphicsのオブジェクトを引数に持ちますが抽象クラスはオブジェクトを発生できないのに何故オブジェクトを渡せるのでしょうか?

Aベストアンサー

実際にパラメータとして渡されるのは、Graphicsのサブクラスのインスタンスだからです。

Graphics クラスは抽象クラスですが、そのサブクラスは抽象クラスとは限りません。

Qimport java.applet.Applet;について

ソースの先頭にimport java.applet.Applet;と書かれたソースをコンパイルすると、ローカルのjava.applet.Appletを読み込んで*.classを作るのだと思うのですが、java.applet.Appletが見つかりません。
普通はどのあたりにあるのでしょうか?

Aベストアンサー

java.applet.AppletクラスはJavaの実行環境(JRE)、またはJavaの開発環境(J2SE)のライブラリとして標準でインストールされています。

具体的には、下記のディレクトリの"rt.jar"に含まれています。(Windowsの場合)

■JRE
 C:\Program Files\Java\<Javaのバージョン>\lib

■J2SE (C:\j2sdk1.4.2にインストールした場合)
 C:\j2sdk1.4.2\jre\lib

通常は、コンパイル時には上記のJ2SE側の rt.jar を使ってコンパイルされるので java.applet.Appletクラスの存在を意識しなくても良いです。
また、実行時には上記のJRE側の rt.jar が使用されます。

ですから、コンパイル時、あるいは実行時にそれぞれのディレクトリに rt.jar がないとエラーが発生します。

ちなみに rt.jar の中身を確認したいのであれば、下記のコマンドをコマンドプロンプトから実行し、出力先のファイルをテキストエディタで開くと確認できます。

 cd C:\j2sdk\jre\lib   ← ディレクトリ移動

 jar tvf rt.jar > C:\Temp\result.txt ← rt.jarの中身をテキストファイルに出力

 notepad C:\Temp\result.txt   ← メモ帳で出力結果を表示


 出力結果のファイルには、java.applet.Appletであれば "java/applet/Applet" のように "." が "/" に置き換わって出力されています。

java.applet.AppletクラスはJavaの実行環境(JRE)、またはJavaの開発環境(J2SE)のライブラリとして標準でインストールされています。

具体的には、下記のディレクトリの"rt.jar"に含まれています。(Windowsの場合)

■JRE
 C:\Program Files\Java\<Javaのバージョン>\lib

■J2SE (C:\j2sdk1.4.2にインストールした場合)
 C:\j2sdk1.4.2\jre\lib

通常は、コンパイル時には上記のJ2SE側の rt.jar を使ってコンパイルされるので java.applet.Appletクラスの存在を意識しなくても良いです。
また、実行時...続きを読む

Qimportするには java.io.*; import org.apache.log4j.*;

EclipseでJavaの開発をしています。
import java.io.*;
import org.apache.log4j.*;
がエラーになります。
多分ライブラリーに入れる必要があるのだと思いますが、その方法について
教えて下さい。宜しくお願い致します。

Aベストアンサー

プロジェクトフォルダを右クリック→「ビルド・パス」→「ビルド・パスの構成」
あるいはプロジェクトフォルダを右クリック→「プロパティ」→「Javaのビルド・パス」

で、ライブラリがプロジェクトフォルダ配下に存在しているなら「Jarの追加」
プロジェクトフォルダ以外の場所にあるなら「外部Jarの追加」で追加できます。

ちなみにjava.ioはJ2SEに含まれているので(「JREシステムライブラリ」があるはずなので)
追加しなくても良いです。

Qjava.lang.outofmemoryerror java heap space

java のクラスファイルをjarにして、実行する時、大きいなファイルを読むと、java.lang.outofmemoryerror java heap spaceのエラーが出できます。
どう解決すればいいですか。

Aベストアンサー

多分、JVM に設定したメモリサイズの上限値を超えてしまったのだと思われます。
Xms や Xmx オプションなどをつけて実行してみたらどうでしょう。

以下のサイトなどを参考にしてみて下さい。

参考URL:http://www.intra-mart.jp/download/doc/OutOfMemoryError.html

QAWT Frameを利用するプログラムのmainメソッドを含むクラスについて

AWTのFrameを継承してWindowプログラムを作成する際に、どんな書籍のサンプルプログラムを見ても、メインクラスがFrameを継承し、その中にmainメソッドが有って、そのmainメソッド内で自分自身のクラスのインスタンスを作成してshowする、といった事を定石のように行っています。
しかし私が思うに、mainメソッドなど含まずFrameを継承してWindow周りの処理を純粋に行うクラスを作成し、プログラムのメインとなるクラス内のmainメソッドからFrameを継承した別クラスのインスタンスを作成・showする方が、よほどスッキリして理解し易いような気がするのですが、どうなんでしょ?
そういったサンプルプログラムを作成してみましたが問題なく動作します。ただそういう事をやっている他のサンプルソースが見当たらないので、何となく不安です(笑)

Aベストアンサー

私も簡単なサンプルを作るときは、Frameのクラスの中にmain()を
書いてしまいます(わざわざもう1つクラスを作るのが面倒という
だけの理由です)。
ライブラリとして作ってつくっていくときはmain()は別にしています。
文法上も問題はないので、main()は別にしても良いのではないでしょうか。


人気Q&Aランキング

おすすめ情報