質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

2回答

32289閲覧

実行エラー jarファイルを見つけてくれない。 Exception in thread "main" java.lang.NoClassDefFoundError

R.lawliet

総合スコア41

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

1クリップ

投稿2015/05/15 09:11

こんばんは、お世話になっております。
今日は電卓の作成中です。
コマンドプロンプト上でキーボードからの直接入力を受け取らせています。

コードはなんとか作れたと思うので、テストをしたいのですが。。。

コンパイル後の実行で、
入力された文字列を数値か判断するメソッドのところで詰まっている模様。
↓コレが使いたいです。

lang

1NumberUtils#isNumber()

コンパイルの時点で悪いのか、単に実行する時の指定が悪いのか。。。
平日が終わりお手上げになったので、皆様の知恵をお借りしに来ました。

以下実行時のコマンドプロンプトのエラー
例として数字の8を入れました。

lang

1C:\JAVA\workspace\KeyBoad\Calculator>java Calculator 2現在の値0 3演算子 4入力された値 5数値を入力して下さい 68 7Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/la 8ng3/math/NumberUtils 9 at Calculator.fork(Calculator.java:96) 10 at Calculator.main(Calculator.java:30) 11Caused by: java.lang.ClassNotFoundException: org.apache.commons.lang3.math.Numbe 12rUtils 13 at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 14 at java.security.AccessController.doPrivileged(Native Method) 15 at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 16 at java.lang.ClassLoader.loadClass(ClassLoader.java:307) 17 at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 18 at java.lang.ClassLoader.loadClass(ClassLoader.java:248) 19 ... 2 more 20 21C:\JAVA\workspace\KeyBoad\Calculator> 22

実行時や環境変数にクラスパスを付けてみたりしたのですが、全部同じエラーです。
以下使いたい言語のパス

lang

1C:\JAVA\language\commons-lang3-3.4-bin\commons-lang3-3.4\commons-lang3-3.4.jar

この中に含まれる

lang

1org/apache/commons/lang3/math/NumberUtils

を使用したいです。

コンパイルした時のコマンド(フルパスで指定)

lang

1C:\JAVA\workspace\KeyBoad\Calculator>javac -cp C:\JAVA\language\commons-lang3-3.4-bin\commons-lang3-3.4\commons-lang3-3.4.jar Calculator.java

見せる順番めちゃめちゃですみません、
最後にimportした時のコード

lang

1import org.apache.commons.lang3.math.NumberUtils;

どうかよろしくお願い致します><

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

こんにちは。

実行時や環境変数にクラスパスを付けてみたりしたのですが、全部同じエラーです。

とのことなのですが、試してみた起動コマンドとして
-classpath
オプションを指定して、そのパスとして

lang

1.\;C:\JAVA\language\commons-lang3-3.4-bin\commons-lang3-3.4\commons-lang3-3.4.jar

を指定して、JAVAコマンドの起動コマンドラインとして、以下

lang

1java -classpath .\;C:\JAVA\language\commons-lang3-3.4-bin\commons-lang3-3.4\commons-lang3-3.4.jar Calculator

でも、同様の

ClassNotFoundException: org.apache.commons.lang3.math.NumberUtils

のエラーになったということでしょうか?

投稿2015/05/15 09:37

jun68ykt

総合スコア9058

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

R.lawliet

2015/05/15 13:24

コメントありがとうございます。 「.\;」これが実行時には要るのですね。 理由もargiusさんのお陰で理解出来ました。 お持ち帰りは禁止なので、この土日で似たようなものを実装して試してみたいと思います。
guest

0

ベストアンサー

実行時にも参照しているライブラリーのクラスパスを設定する必要があります。

> java -cp .\;C:\JAVA\language\commons-lang3-3.4-bin\commons-lang3-3.4\commons-lang3-3.4.jar Calculator

.\Calculator.classにクラスパスを通すために指定しています。
-cpを使わない場合はデフォルトのクラスパス(=カレントディレクトリー)がクラスパスに設定されますが、-cpを使う場合は-cpで指定したクラスパスで上書きされてしまうので、.\を指定する必要があります。(環境変数CLASSPATHに設定されていれば、それが使われます。)

参考ページ:
クラス・パスの設定 - Java Platform, Standard Editionツール・リファレンス

投稿2015/05/15 09:34

argius

総合スコア9390

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

R.lawliet

2015/05/15 13:30

いつも詳しい解説までありがとう御座います! 参考ページ、勉強になりました。 ここの部分ですね↓ デフォルトのクラス・パスは、現在のディレクトリです。このデフォルトは、CLASSPATH変数を設定したり、-classpathコマンド行オプションを使用したりするとオーバーライドされます。そのため、検索パスに現在のディレクトリを含める場合には、新しい設定にドット(.)を含める必要があります。 CLASSPATH指定の実行はやっと理解出来ました。 しかし環境変数のclasspathの使い方がイマイチまだ理解出来て居ないようです。 Eclipseで今までやってきましたが、そろそろ頼らずに作れる練習をしていこうと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問