• ベストアンサー

Package内のクラスを利用する

最近、javaのプログラムを学びはじめたものです。 自分で作成したクラスをpackageにまとめてそれを 他のプログラムで呼び出すにはどうすればよいか分からず importやクラスパスを使ってみたのですがエラーが出てしまいます。 このやり方についての参考になるサイトや方法などお知りでしたら 教えてください。よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • OKbokuzyo
  • ベストアンサー率43% (130/296)
回答No.2

#1です。 java標準ではないクラス(独自で作成したクラスなど)を使用する場合、 そのクラスがどこに存在するのか教えてやらなければなりません。 そりゃそうですよね。number3-33さんが作成したものなんて javaが知る由もありませんから。 使用するjavaクラス(ライブラリ)を指定する方法は次の二通りあります。 1.コマンドのオプションに「-classpath」を指定する。 2.環境変数「CLASSPATH」に使用するクラス(ライブラリ)のパスを指定する。 余談ですが、上記1や2の行為を「クラスパスを通す」とか「クラスパスをきる」と言います。 ※例)質問者さんの場合、「ExPackage3クラスを実行(あるいはコンパイル)するには、ExPackage2クラスのクラスパスを通す必要がある」といった使い方をします。 質問者さんの場合、「呼び出すほうのプログラム」の前に 「呼び出したいプログラム」をまずコンパイルし、 その後、作成された「呼び出したいプログラムのクラスファイル」をクラスパスに指定して 「呼び出すほうのプログラム」をコンパイルする必要があります。 例えば、もしExPackage2.javaとExPackage3.javaが同一フォルダにある場合、 カレントディレクトリをそれらファイルの存在するフォルダにまで移動し、次のようにタイプします。 >javac ExPackage2.java >javac -classpath . ExPackage3.java 一つ目のコマンドを実行すると、カレントディレクトリにExPackage2.classファイルが作成されるはずです。 二つ目のコマンドの「.」はカレントディレクトリを表します。 すなわち、クラスパスにカレントディレクトリを通すということです。 長々と書きましたが、ご参考とされているサイトにも クラスパスについて解説があるようです。 http://www.javaroad.jp/java_basic2.htm

number3-33
質問者

お礼

お返事ありがとうございました。 教えていただいた「2.環境変数「CLASSPATH」に使用するクラス(ライブラリ)のパスを指定する。」で指定してやったところ無事にコンパイルと実行ができました。

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

その他の回答 (1)

  • OKbokuzyo
  • ベストアンサー率43% (130/296)
回答No.1

もっと詳細に記載したらどうですか?教えてもらうにしては少し怠惰な態度だと思いませんか? 何をどのようにしようとしたら、どんなエラーが出たのか記載してください。 1.エラーの内容を記載してください。 2.javacコマンドやjavaコマンドの利用でつまづいているのなら、 そのとき実行したコマンドラインを記載してください。 3.可能ならば必要最低限のソースを記載してください。 最も重要なのは1です。 初心者のあなたにはエラーを見てもさっぱりでも、それが最も良い情報なのです。 ただ「なんかエラーが出てます。教えてください」では教える方も何を教えたらよいかわかりませんよ。

number3-33
質問者

補足

すいません、内容がほとんどない質問でした。詳細を書き直します。 まず、次のサイトを参考にしました。 http://www.javaroad.jp/java_package2.htm 「呼び出したいクラスのプログラム」 package pack; public class ExPackage2 { public void showClass() { System.out.println("クラスExPackage2です。"); } } 「呼び出すほうのプログラム」 package packB; import pack.ExPackage2; public class ExPackage3 { public static void main(String[] args) { ExPackage2 ex = new ExPackage2(); ex.showClass(); } } この「呼び出すほうのプログラム」をjavacでコンパイルしたところ 次のようなエラーが出ました。 $ javac ExPackage3.java ExPackage3.java:3: パッケージ pack は存在しません。 import pack.ExPackage2; ^ ExPackage3.java:7: シンボルを見つけられません。 シンボル: クラス ExPackage2 場所 : packB.ExPackage3 の クラス ExPackage2 ex = new ExPackage2(); ^ ExPackage3.java:7: シンボルを見つけられません。 シンボル: クラス ExPackage2 場所 : packB.ExPackage3 の クラス ExPackage2 ex = new ExPackage2(); ^ エラー 3 個 よろしくお願いします。

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

関連するQ&A

  • importでクラスを呼び込みたい

    今、javaプログラムでjarファイルの中のクラスを呼び込む というものを作成しています。 プログラムでjarファイル内のクラスを呼び込むためにimportを 使ってクラスを使いますということを宣言しなくてはいけないのですが、importが上手くいかずエラーが出てしまい、プログラムがコンパイルできません。 クラスを含んだjarファイルの場所は /home/kimura/javahello/JarTest.jar です。その中にHello.classというクラスメソッドが入っておりそれを 別の場所で作成しているプログラムで呼び出し使いたいと思っています。 importの記述方法が分からず困っています。 この記述方法分かるという方がいらっしゃったら教えてください。 参考サイトなどもお知りでしたらよろしくお願いします。

    • ベストアンサー
    • Java
  • 同一パッケージにあるクラスが見つからないエラー

    Tomcatとeclipseを用いてjspによるウェブアプリ開発の勉強をしているものです。 tagsrch.java内のメソッドに、同一パッケージ(フォルダ名:mangasearch)内のmangalist.javaで定義したmangaクラスというクラスを使いたいのですが、以下のように、シンボルが見つけられないというエラーが出てしまいます。 C:\(中略)\mangasearch>javac tagsrch.java tagsrch.java:11: エラー: シンボルを見つけられません public static List<manga> searchByKey(String k[]) throws IOException{ ^ シンボル: クラス manga 場所: クラス tagsrch tagsrch.java:14: エラー: シンボルを見つけられません manga[] list = new manga[cnum]; 同一パッケージ内に置かれている以上、tagsrch.javaにおいてmangaクラスが使えるはずだと思います。 ですが、いろいろなサイトを参考にして試してもmangaクラスが見つからないまま、tagsrch.javaがコンパイルできません。 初歩的質問で申し訳ありませんが、よろしくお願いいたします。 -参考- 1.いろいろ試したこと  1-1.カレントディレクトリを保存している場所より1つ上の場所でコンパイルする。  eclipseでtomcatプロジェクトを作成したため、どのクラスファイルにもpackage mangasearch;が含まれていました。なので1-1.を行い「javac パッケージ名/ファイル名」でコンパイルしてみました。  1-2.クラスパスを入れてコンパイルしてみる。  同一パッケージ内なので、この必要はないはずですが、  C:\(中略)\mangasearch>javac -classpath C:\(中略)\mangasearchでコンパイルしてみました。   下記のURLを参考にこの対策を講じましたが、エラーは変わりませんでした。  1-1.1-2.の参考URL:http://okwave.jp/qa/q2520327.html  1-3.メソッドをmangalist.java(mangaクラス)上で定義してしまう。  分割をあきらめ、tagsrch.java上のメソッドをmangalist.javaのmangaクラス上に定義してみました。 publicつけたままだと、 C:\(中略)\mangasearch>javac mangalist.java mangalist.java:76: エラー: クラスtagsrchはpublicであり、ファイルtagsrch.javaで宣 言する必要があります となったため、publicをとりました。するとコンパイルは出来ましたが、おそらく異なるパッケージからは使えないクラスとなったため、jsp上でアクセスできないというエラーが発生しました。 org.apache.jasper.JasperException: javax.servlet.ServletException: java.lang.IllegalAccessError: mangasearch/tagsrch このため、分割してtagsrch.javaを宣言する必要があり、1-3.の対策では最初にあげたmangaクラスを認識する問題に帰着すると思われます。 2.mangalist.java/tagsrch.javaについて mangalist.javaのコンパイルはできています。 mangalist.javaは、ただ単にmangaクラスとそれに付随するフィールド、コンストラクタを記述しただけのファイルです。 ■mangalist.java package mangasearch; class manga{ フィールド名 ・・・    manga(){    //コンストラクタ    } } ■tagsrch.java public class tagsrch extends manga{ メソッド{     } }

    • ベストアンサー
    • Java
  • ファイルからの入力 Scannerクラス

    ファイルの内容を読み込むプログラムをJavaで作成しています。 Scannerクラスを利用するため、以下のようにimport宣言しました。 package bc; import java.util.Scanner; class FileScanner {  コンストラクタ{   }  メソッド{   }    :    :  mainメソッド{   } } という感じで書いているのですが、この場合のメソッド名は、 Scannerクラスで定義されている名前でないとダメなのでしょうか? 自分で作った名前でメソッドを定義したのですが、 Scannerクラスで定義されていません。 というようなエラーが返ってきてうまくいきません。 どなたか、ご教授くださいm(_ _)m

    • ベストアンサー
    • Java
  • java パッケージについて

          [test](ルート)        |    ーーーーーーーーーーーーーーーーーーー    |         |          |         Test.java   DirTestA.java        [testt]                       |                             [testtt]                       |                     DirTestB.java パッケージについてわからないので質問します。 上の図のようにファイルを格納しています。 DirTestA.javaでDirTestB.javaのオブジェクトを作成するのは DirTestB.javaをimportすれば可能ですが 逆にDirTestB.javaでDirTestA.javaのオブジェクトを作成ができません。DirTestA.javaでpackage Test;と定義して DirTestB.javaでimport Test.DirTestA;とインポートしても ./TestT/TestTT/DirTestB.java:2: パッケージ Test は存在しません。 とエラーが出ます。 どうすればオブジェクトを作成できますか?

  • はじめてのパッケージの使い方

    JAVAでのパッケージの使い方について 教えて下さい。 下記を参考にしました。 Javaの道 > Java基本 > パッケージ -2.パッケージの作成 http://www.javaroad.jp/java_package2.htm サンプルにある通りコンパイルをすると うまく行くのですが カレントのディレクトリを変更すると どうすればいいのかわかりません。 知りたいことは カレントディレクトリPackageBから 別ディレクトリのPackageAをインポートすることは可能でしょうか? やってみた結果は以下となります。 PackageB>javac ExPackage2B.java ExPackage2B.java:3: パッケージ PackageA は存在しません。 import PackageA.ExPackage2A; //(4) ^ ExPackage2B.java:7: シンボルを見つけられません。 シンボル: クラス ExPackage2A 場所 : PackageB.ExPackage2B の クラス ExPackage2A ex = new ExPackage2A(); //(6) ^ ExPackage2B.java:7: シンボルを見つけられません。 シンボル: クラス ExPackage2A 場所 : PackageB.ExPackage2B の クラス ExPackage2A ex = new ExPackage2A(); //(6) ^ エラー 3 個 PackageA/ExPackage2A.javaファイル package PackageA; //(1)パッケージPackageAの定義 public class ExPackage2A { //(2)publicなクラスExPackage2Aの定義 public void showClass() { System.out.println("クラスExPackage2Aです。"); } } PackageB/ExPackage2B.javaファイル package PackageB; //(3)パッケージPackageBの定義 import PackageA.ExPackage2A; //(4) public class ExPackage2B { //(5) public static void main(String[] args) { ExPackage2A ex = new ExPackage2A(); //(6) ex.showClass(); //(7) } }

    • ベストアンサー
    • Java
  • 無名パッケージのクラス

    パッケージ化されたクラス(pacA.ClassA)から、無名パッケージ(ClassB)のクラスを参照できるのでしょうか。 状況を詳しく書きますと、 ClassB はコンパイル済みで、pacA.ClassA の中で ClassB を new しています。 pacA.ClassA をコンパイルしたいのですが、ClassB を import できません(コンパイルエラー)。 それとも、ClassB は import する必要がなく、単に私のコンパイルの仕方(classpathの通し方等)が悪かったのでしょうか。 どなたか教えて頂けませんか。

    • ベストアンサー
    • Java
  • Javaのパッケージについて初歩的な質問です

    Javaのパッケージについて質問です このコードの1番最後のZenhanクラスのdoTogameメソッドを呼び出しているところで, パッケージ化していてimportされていないのに クラス名.メソッド名でエラーなしで処理できるのはなぜですか? 同じパッケージ名だからだですか? mainメソッドでimportしてるからですか?教えてください

  • java import文のエラー

    javaのソースで、パッケージをimportして使用するための簡単なサンプルを作成しました。 import文でクラス名まで指定すれば問題ないのですが、*を利用するとコンパイルエラーとなってしまいます。 コンパイル時にクラスパスを指定するのかと思って試してみましたが、やはりエラーでした。 回避方法をご存知の方いらっしゃいましたら、教えていただけますでしょうか。 なお、java/javacは、1.5.0_14を使用しています。 ■ソースコード(1) <C:\Work\Test\PackTest.java> package Test; public class PackTest{   public static void methodA(){     System.out.println("パッケージ成功");   } } ■ソースコード(2) <C:\Work\UsePack.java> import Test.*;     //import Test.PackTest; なら成功 class UsePack{   public static void main(String args[]){     PackTest.methodA();   } } ■エラー例(1) >javac -d . PackTest.java (これは成功) >javac UsePack.java   UsePack.java:5: PackTest にアクセスできません。   クラスファイル .\PackTest.java は不正です。   ファイルにクラス PackTest が含まれていません。   削除するか、クラスパスの正しいサブディレクトリにあるかを確認してください。     PackTest.methodA(); ■エラー例(2) >javac -d . PackTest.java (これは成功) >javac -classpath C:\Work\Test UsePack.java   UsePack.java:1: パッケージ Test は存在しません。   import Test.*;   ^   UsePack.java:5: PackTest にアクセスできません。   クラスファイル C:\Work\Test\PackTest.class は不正です。   クラスファイル Test.PackTest に不正なクラスがあります。   削除するか、クラスパスの正しいサブディレクトリにあるかを確認してください。      PackTest.methodA();      ^

  • Beanクラスのimportについて

    Beanクラスを作成し、そのBeanクラスをServletでimportしたいのですがコンパイルするとエラーになってしまいます。 Bean(TestBean.java)をsampleパッケージに保存してコンパイルした後に Servlet(Test.java)を ----------------------------------------------- import sample.TestBean; import javax.servlet.*; ・・・・・・・ ・・・・・・・ ------------------------------------------------ として、sampleファイルのひとつ上のディレクトリーに保存してコンパイルすると Test.java:1: シンボルを解釈処理できません。 とエラーになってしまいます。 原因がお分かりになるかた、ご教授をお願いできないでしょうか。よろしくお願いいたします。

    • ベストアンサー
    • Java
  • NetBeansでのJavaプログラミングについて

    今NetBeansで本を見ながらJavaプログラミングの勉強をしているのですが、本のパッケージとクラスパスの章をやっているのですが自作のパッケージをインポートするときいちいちクラスファイルを持ってきてコンパイルしているのでものすごく不便です。本にはドットを使ってクラスパスに指定されたディレクトリの中のフォルダに入っているクラスファイルにアクセスできるとあったのですがNetBeansのクラスパスの設定の仕方もわからずかなり困っています。NetBeansの使い方を調べたりもするのですがどのサイトもいまいちわかりずらいのでどなたかご教授お願いします。