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

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

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

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

JAR

JAR(又はJava ARchive)はコンパイルされた複数のJavaバイトコード及び関連ファイルのリソースを一つのファイルに統合したものです。JARファイルはZIPファイルのフォーマットで構築されています。

Java

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

Q&A

解決済

2回答

883閲覧

Javaでjarファイルを使いたい

aiueoaiueoaiue

総合スコア94

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

JAR

JAR(又はJava ARchive)はコンパイルされた複数のJavaバイトコード及び関連ファイルのリソースを一つのファイルに統合したものです。JARファイルはZIPファイルのフォーマットで構築されています。

Java

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

0グッド

0クリップ

投稿2018/01/11 15:55

編集2018/01/12 01:43

#内容
最終目的としてはこのサイト1にあるサンプルプログラムを実行したいのですが、エラーが出てしまいました。
最初のエラーでは.jarファイルが足りないとのことだったのでこのサイト2を参考にクラスパスを追加してみましたが、メイン・クラスTest1を検出及びロードできませんでしたと出ます。まだ何か設定しなければいけないところがあるのか、それが設定されているのをどう確認すればよいかわかりません。この悩みを解決できる方回答お願い致します。
#サンプルプログラム

Java

1 2import java.io.IOException; 3import java.io.UnsupportedEncodingException; 4import java.nio.charset.Charset; 5import java.nio.charset.StandardCharsets; 6import org.apache.http.HttpStatus; 7import org.apache.http.client.ClientProtocolException; 8import org.apache.http.client.methods.CloseableHttpResponse; 9import org.apache.http.client.methods.HttpGet; 10import org.apache.http.impl.client.CloseableHttpClient; 11import org.apache.http.impl.client.HttpClients; 12import org.apache.http.util.EntityUtils; 13 14/** 15 * HttpClientsのサンプル 16 */ 17class Sample { 18 19 void runSample() { 20 Charset charset = StandardCharsets.UTF_8; 21 22 CloseableHttpClient httpclient = HttpClients.createDefault(); 23 HttpGet request = new HttpGet("http://httpbin.org/get"); 24 25 System.out.println 26 ("requestの実行 「" + request.getRequestLine() + "」"); 27 //requestの実行 「GET http://httpbin.org/get HTTP/1.1」 28 29 CloseableHttpResponse response = null; 30 31 try { 32 response = httpclient.execute(request); 33 34 int status = response.getStatusLine().getStatusCode(); 35 System.out.println("HTTPステータス:" + status); 36 //HTTPステータス:200 37 38 if (status == HttpStatus.SC_OK){ 39 String responseData = 40 EntityUtils.toString(response.getEntity(),charset); 41 System.out.println(responseData); 42 //取得したデータが表示される 43 } 44 } catch (ClientProtocolException e) { 45 e.printStackTrace(); 46 } catch (UnsupportedEncodingException e) { 47 e.printStackTrace(); 48 } catch (IOException e) { 49 e.printStackTrace(); 50 } finally { 51 try { 52 if (response != null) { 53 response.close(); 54 } 55 if (httpclient != null) { 56 httpclient.close(); 57 } 58 } catch (IOException e) { 59 e.printStackTrace(); 60 } 61 } 62 } 63} 64public class Test1 { 65 public static void main(String[] args) { 66 Sample s = new Sample(); 67 s.runSample(); 68 } 69}

#コマンドプロンプトの内容
エラー
上記の画像でクラスパスが通っているのは確認しました。
イメージ説明
解答反映後です。
#追記
Javaのバージョンは9.0.1です。極力Eclipseは使わず行いたいです。
#さらに追記(クラスパス変更後のエラーの内容)
C:\Users\ユーザー>set CLASSPATH=C:\Users\ユーザー;F:\commons-logging-1.2.jar;F:\httpclient-4.5.4.jar;F:\httpcore-4.4.7.jar

C:\Users\ユーザー>set CLASSPATH
CLASSPATH=C:\Users\ユーザー;F:\commons-logging-1.2.jar;F:\httpclient-4.5.4.jar;F:\httpcore-4.4.7.jar

C:\Users\ユーザー>javac Test1.java

C:\Users\ユーザー>java Test1
エラー: メイン・クラスTest1を検出およびロードできませんでした
原因: java.lang.NoClassDefFoundError: test1/Test1 (wrong name: Test1)

C:\Users\ユーザー>java -cp .;%CLASSPATH% Test1
エラー: メイン・クラスTest1を検出およびロードできませんでした
原因: java.lang.NoClassDefFoundError: test1/Test1 (wrong name: Test1)

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

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

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

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

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

guest

回答2

0

ベストアンサー

原因はやはりCLASSPATHのようです。

質問者さんはコンパイルする目的で環境変数CLASSPATHにより外部参照クラスのパスを設定しておられます。そこに含まれるのは以下のjarのみですね?

F:\commons-logging-1.2.jar
F:\httpclient-4.5.4.jar
F:\httpcore-4.4.7.jar

しかし上記には肝心の「自分のプログラムのクラスファイルのパス」が含まれていません。

java Test1としたときjavaコマンドはクラスパスの中にTest1.classが存在すると想定してクラスをロードしようとしますので、上記のCLASSPATHでは不足していたわけです。

対処法はクラスパスに今コンパイル作業に使っているディレクトリーを含めることですが・・・

(A) CLASSPATH環境変数に設定してしまう
set CLASSPATH C:\Users\ユーザー;F:\commons-logging-1.2.jar;F:\httpclient-4.5.4.jar;F:\httpcore-4.4.7.jar

とやってもいいですし、javaのコマンドラインに以下のように指定することでもよいでしょう。

(B) javaのオプション-cp(-classpathの短縮形)を用いる
java -cp .;%CLASSPATH% Test1
(-cpはjavacでも使えます)

なお、環境変数にせよ-cpオプションにせよ、コマンドプロンプトに入るたびあるいはコンパイルや実行をする度に一々設定・指定するのは面倒ですしミスの元です。こうした面からもIDEを用いた方が簡単なのですが、IDEを用いない場合でもせめてバッチファイルを作成しておくといった工夫はしておいた方がよいと思います。

そのようにして「何をしているか常に明確・確実」にしておくと自分の作業が確認しやすいですし、こうした場で質問する際にも自分がしたことを説明するのが簡単・明瞭に伝わりやすくなります。なお、情報の提示のしかたとしてスクリーンショットなどを貼るよりバッチファイルの中身をコピペした方がベターです。なぜなら閲覧者がそのままコピペして確認しやすいからです。スクリーンショットではコピペできませんよね?

投稿2018/01/12 01:24

編集2018/01/12 01:27
KSwordOfHaste

総合スコア18394

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

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

aiueoaiueoaiue

2018/01/12 01:40

回答ありがとうございます。仰る通りにクラスパスを変更してみた結果エラーの内容が少しだけ変わりました。これは少し前進したとみていいのでしょうか?
aiueoaiueoaiue

2018/01/12 01:45

すみません、一行目にpackage test1というのを追加していたのが原因でした。ありがとうございました。
guest

0

java test1ではなくjava Test1では?

投稿2018/01/11 15:58

LouiS0616

総合スコア35660

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

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

aiueoaiueoaiue

2018/01/11 16:00

仰る通りに実行してみましたが同じエラーが出ました。
LouiS0616

2018/01/11 16:51 編集

コンパイル時に一回エラーが出ていますが、結局どのように解消したのでしょうか? もし ・Test1をpublicでなくすることで対応した ⇒ java Test1 で起動できるはず ・クラス名をtest1に変更して対応した ⇒ java test1 で起動できるはず
LouiS0616

2018/01/11 16:45

一度 .class ファイルを消して再ビルドした方が良いかもしれませんね。
aiueoaiueoaiue

2018/01/12 00:41

一度目のコンパイル時のエラーはクラス名とファイル名が一致してなかったのでそれを修正してエラーが消えました。 再ビルドというのはもう一度コンパイルするという事でいいですか? それならやってみましたが、変わらずエラーが出ました。
aiueoaiueoaiue

2018/01/12 00:48

現在はプログラムのファイル名はTest1.javaという名前にしています。そしてコンパイルして実行すると、Test1.classという名のクラスファイルが生成されています。.javaも.classもファイルのある場所は画像にあるカレントディレクトリの場所にあります。
KSwordOfHaste

2018/01/12 04:11

windowsで大文字・小文字のファイル名が区別されない点とlinux起源のプログラムの相性の問題では混乱することが多いですが・・・今回あえて小文字のファイル名としてtest1.javaとして、 javac Test1.java としてみたのですが、当然ながら(?)コンパイルできてしまい、うーん、まぁそうなるのか・・・とちょっと釈然としない思いにかられましたw;
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問