• 締切済み

パッケージ化とクラスパスについて

いつもお世話になっております。 パッケージ化について教えて下さい。 ■動作確認環境 j2sdk 1.4.2_12 CLASSPATH の設定は .;C:\sample です。 ----- 現在、以下のようなフォルダ構成で、パッケージ化とアクセス制御の勉強をしています。 C:\sample  |__ testpackage01     |__ TestParent.java C:\sample  |__ testpackage02     |__ TestChild.java やりたかったことは、TestChild が TestParent を継承し、"別パッケージでも親クラスの protected 変数 / メソッドはアクセスできる"ということの確認です。 しかし、TestParent の実行時に "NoClassDefFoundError: TestParent (wrong name: testpackage01/TestParent)" の RunTimeException が発生してしまいます。 コンパイルは正常に通ります。また、TestParent のパッケージ宣言 "package testpackage01;" をコメントアウトすると、正常に実行できます。 TestParent の処理は、mainメソッドの中で、文字列の表示を 1行行っているだけです。 自分ではもうどこをどうしたらよいのか、さっぱり分からなくなってしまいました。 間違っている部分をどなたかにご教授頂けたら幸いです。 宜しくお願い致します。

みんなの回答

  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.2

>C:\sample\testpackage01>java TestParent 実行開始ディレクトリー=無名パッケージとして扱われるので、 TestParentに package宣言を書くとエラーになります。 それに、package内のクラスから直接実行開始というのは、packageの解説サイトでもあまりみたことないですけど。 実行開始ディレクトリー(無名パッケージ)を C:\sample として、ここにmain実行クラスをおいて mainクラスで testpackage01.TestParent と testpackage02.TestChild とのインスタンスを生成して、各インスタンスから実行したmethodがどのように振る舞うのかを見ることで protected methodや public methodの挙動を捕らえることが出来ると思います。 http://www.nextindex.net/java/packageUse.html

参考URL:
http://www.nextindex.net/java/packageUse.html
daisy_k
質問者

お礼

今回は、javaコマンドの後のクラス名は「完全修飾クラス名」を記述することによって、疑問に思っていたことは解決致しました。 main実行クラスについては、あくまでもデバッグのため暫定的に記述したものです。 ご回答ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • Bonjin
  • ベストアンサー率43% (418/971)
回答No.1

java実行時のディレクトリとjavaコマンドの引数を書いてみてください。

daisy_k
質問者

補足

Bonjin さん、ご回答ありがとうございます。 java実行時のディレクトリとjavaコマンドの引数は、以下になります。 C:\sample\testpackage01>java TestParent 再度ご回答頂けたら幸いです。 宜しくお願い致します。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • クラスパスの設定

    システム環境変数における設定 C:\java\pack1\sample1.jar C:\java\pack2\sample2.class があり、sample2.classのソースファイルが C:\java\pack3\sample2.java だとします。 さらにsample1.jarを解凍すると sample1\sample3.classにmainメソッドがあるものとします。 このとき、 sample2.classを実行するときにsample1.sample3をインポートできるようにする為には、sample2.classに import pack1.sample3; CLASSPATH C:\java\pack1\sample.jar でよいでしょうか?それともどこか間違っているでしょうか?

    • ベストアンサー
    • Java
  • クラスパスがとおりません。

    クラスパスがどおしてもとおりません。 # javac JdbcAccessTest.java # java JdbcAccessTest.class Exception in thread "main" java.lang.NoClassDefFoundError: JdbcAccessTest/class 以下のようにパスを通しているのですが。。 # pwd /export/home/test/webapp/sample/WEB-INF/classes # env CLASSPATH=/export/home/test/webapp/sample/WEB-INF/classes ・環境はSolarisです。よろしくお願いします。

    • ベストアンサー
    • Java
  • Exception in thread "main" java.lang.NoClassDefFoundError: helloworldで困っています

    Exception in thread "main" java.lang.NoClassDefFoundError: helloworldと出てJAVAが実行できません。どうしたらよいのでしょうか。以前もこういう質問をしたのですが、またなってしまいました。 CLASSPATHの設定とかもしてみようといろいろと試行錯誤したのですが、だめでした。どういう設定にすればよいかもわかりません。 どうにかして、 java HelloWorld で実行できるようになりませんか? JAVAのSDKをインストールした場所は C:\j2sdk1.4.0 です。コンパイルはできます。 OSはWindowsXPです。初心者ですが、どうかよろしくお願いします。

  • コンパイルはうまくいったのですが…

    > 全くの初心者です。お手数ですが、よろしくお願いします。 > > 実行時に下記エラーが表示されます。 > Exception in thread "main"java.lang.NoClassDefFoundError:test > > ・OS:windows XP > ・JAVA 2 SDK 「1.4.2_06」 > ・javaファイル「test.java」(C:\ja) > ・環境変数 > "Path" > 「%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;C:\j2sdk1.4.2_06\bin」 > > ※実行がうまくいかなかったので、「CLASSPATH」を新規に設定して > みました。正直自信がありません。 > 「.;C:\ja\test;%CLASSPATH%」 > > 以上なのですが、どこがいけないかおわかりになりますでしょうか?よろしくお願いします。

    • ベストアンサー
    • Java
  • 実行中にNoClassDefFoundErrorが発生する

    初めて質問させていただきます。 Javaの実行中にNoClassDefFoundErrorが極稀に発生して困っています。 エラーは以下になります。 Exception in thread "Thread-12" java.lang.NoClassDefFoundError: パッケージ.Sample at パッケージ.問題発生クラス.run(問題発生クラス.java:71) 1.問題発生クラス.java:71でパッケージ.SampleをNewしています。 2.エラー内容からNewする時にNoClassDefFoundErrorが発生しているようです。   ただし、NoClassDefFoundErrorは数万回に一回でるかでないか。 ネットでも調べましたがコンパイル字のNoClassDefFoundErrorしか見つかりませんでした。 知恵をお貸しいただけないでしょうか よろしくお願いいたします。

  • パッケージ間のアクセスが分かりません。

    インプレスジャパン「JavaSE7 Silver問題集 P13 問5」より (ファイル1) public class Sample{ protected int num = 10; } (ファイル2) package ex5; public class SampleImpl extends Sample{ public static void main(String[] args){ System.out.println(num); } } ファイル2をコンパルしようとすると、 「エラー: シンボルを見つけられません」とメッセージが表示されます。 SampleとSampleImplクラスは別々のパッケージに属していますが、 変数numはprotectedで修飾されているので、アクセス出来るように 思うのですが、どこが間違っているのでしょうか? 解説には「明示的にパッケージ宣言したクラスから、無名パッケージに 属するクラスにアクセスしようとするとコンパイルエラーになります。」と ありますが、無名パッケージもパッケージの一つであり、 かつ、この2つのクラス間には継承関係もあります。 よろしくお願い致します。

    • ベストアンサー
    • Java
  • 「パッケージ javax.servlet.http は存在しません。」

    「パッケージ javax.servlet.http は存在しません。」というエラー 以下のようなエラーが出ます: C:\Users\Einhorn\mywork\myapp\WEB-INF\src\com\gokui>javac -classpath "C:\apache- tomcat-6.0.26\common\lib\servlet-api.jar" Sample016.java Sample016.java:3: パッケージ javax.servlet.http は存在しません。 import javax.servlet.http.HttpServlet; ^ Sample016.java:6: パッケージ javax.servlet は存在しません。 import javax.servlet.ServletException; ^ Sample016.java:7: パッケージ javax.servlet.http は存在しません。 import javax.servlet.http.HttpServletRequest; ^ Sample016.java:8: パッケージ javax.servlet.http は存在しません。 import javax.servlet.http.HttpServletResponse; ^ Sample016.java:9: シンボルを見つけられません。 シンボル: クラス HttpServlet public class Sample016 extends HttpServlet { ^ Sample016.java:15: シンボルを見つけられません。 シンボル: クラス HttpServletRequest 場所 : com.gokui.Sample016 の クラス public void doGet(HttpServletRequest request, HttpServletResponse respon se) ^ Sample016.java:15: シンボルを見つけられません。 シンボル: クラス HttpServletResponse 場所 : com.gokui.Sample016 の クラス public void doGet(HttpServletRequest request, HttpServletResponse respon se) ^ Sample016.java:16: シンボルを見つけられません。 シンボル: クラス ServletException 場所 : com.gokui.Sample016 の クラス throws ServletException, IOException { ^ エラー 8 個 …EclipseでTomcatを起動したときは問題なく動くんですけど、コマンドプロンプトからjavacだと動きません。 多分、classpathの設定に問題があるんでしょうけど、servlet-api.jarとjsp-api.jarへのclasspathはちゃんと設定されています: >set classpath CLASSPATH=.;C:\Program Files (x86)\Java\jre6\lib\ext\QTJava.zip; C:\Program Files (x86)\Java\jdk1.6.0_17\lib\tools.jar; C:\apache-tomcat-6.0.26\common\lib\servlet-api.jar; C:\apache-tomcat-6.0.26\common\lib\jsp-api.jar; スペック: Windows XP (64-bit) apache-tomcat-6.0.26-windows-x64.zip jdk-6u17-windows-i586.exe jre6 上記の通り、ちゃんと-classpathで指定しているのにエラーが出ます。 後は何を確認すればよいのでしょうか? 必要であれば補足しますので、どうか助けてください。

    • ベストアンサー
    • Java
  • CLASSPATHの確認方法について

    基礎的な質問で申し訳ございません、 Solaris9で、現在設定されているCLASSPATHの値を 確認するには、どのようにすればよいのでしょうか? Web等で調べたのですが確認方法が見つかりませんでした。 設定はアプリケーションに付いていたスクリプトファイルを実行して設定を行いましたが、実行しようと すると java.lang.NoClassDefFoundError エラーが発生してしまったため、正しくCLASSPATHが 設定されているかどうかを確認しようと思った次第です。 宜しくお願い致します。

  • Java:packageについて

    いつもお世話になっております。 Javaのpackage機能について教えていただけますでしょうか。 ただいまJavaの勉強中で、本を購入し、それを基にソースを書いたり動かしております。 その中にpackage機能について説明とサンプルソースがあるのですが、 本のまま書いてもエラーで動きません。本とソースを見比べても相違が見られないため 何が原因かも分からず、困っております。 内容 ・Cドライブ直下にwork3というフォルダを作成 ・work3直下にMain.javaを作成する。 ・work3の中にconverterというフォルダを作成する。 ・converterフォルダ内にDollar.javaとEuro.javaを作成する。 ・コマンドプロンプトにてc:\work3に移動し、Javac **.javaを実行後、java Mainを実行する。 コンパイルは成功し、それぞれのclassファイルは作成されております。 実行すると C:\work3>java Main Exception in thread "main" java.lang.NoClassDefFoundError: Main (wrong name: con verter/Main) at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClassCond(Unknown Source) at java.lang.ClassLoader.defineClass(Unknown Source) at java.security.SecureClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.access$000(Unknown Source) at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) Could not find the main class: Main. Program will exit. とエラーが出て実行されません。 実際のソースです。 ****************** package converter; public class Dollar {  public static int toYen(int dollar){  return dollar * 90;  } } ****************** package converter; public class Euro {  public static int toYen(int euro){   return euro * 120;  } } ****************** package converter; class Main {  public static void main(String[] args){   System.out.println("1ドルは" + Dollar.toYen(1) + "円です。");   System.out.println("1ユーロは" + Euro.toYen(1) + "円です。");  } } ****************** ちなみにですが、3つのソースはjarファイルの実習で使用し、うまく動いてくれました。 packageの実習でpackage ***を一行追加しただけです。 よろしくお願いいたします。

    • ベストアンサー
    • Java
  • JavaのCLASSPATHの設定について

    Java初心者です。過去に類似の質問が多数あり、目を通しましたが、よくわかりませんでした。よろしくお願いします。 コンパイル後、java Sample1と入力して実行しようとすると、 Exception in thread "main" java.lang.NoClassDefFoundError:Sample1 というエラーが出ます。Windows2000を使用。 ユーザー環境変数、システム環境変数の欄共にPathという変数はありますが、CLASSPATHはありません。 CLASSPATHは新規に追加するのでしょうか。それともPathの中に設定するのでしょうか。具体的にどのように設定するのでしょうか。 現在は、毎回Dos画面にset CLASSPATH=.;%CLASSPATH%と入力して実行していますが、PCを起動するたびに行わなくてはならないので、そうしなくてよい方法を教えてください。

    • ベストアンサー
    • Java