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

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

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

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

Java

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

解決済

1回答

6131閲覧

実行可能JARがうまく動作しなくて困っています…

退会済みユーザー

退会済みユーザー

総合スコア0

JAR

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

Java

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

0クリップ

投稿2015/01/06 12:56

Javaを勉強しています、Reinと申します。
よろしくお願いします。

今回、初めてGUIを使ったソフトを作りました。処理系は問題なく、Eclipse上では思い通りの動作をしています。

あとは、他人にも渡せるように実行可能JARとしてエクスポートすれば完成♪というところまで来たのですか…

いざ、実行可能JARとしてエクスポートするとJAR内に格納されているDATファイル(設定ファイル)にアクセスしに行ったところでFileNotFoundExceptionとなり、うまく動作してくれません。

かれこれ2日格闘しているのですが、もうお手上げです。どなたかお助けください。

ファイルの参照はgetClass().getResource()を利用しています。eclipse上で実行した場合、このような不具合は起きません。

DATファイルは内容を読み書きします。

よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

DATが想定外の階層に格納されているか、格納されていない可能性はありませんか?
jarコマンドか解凍ソフトで中身を確認してください。

それと、JARの中のDATは書き込みできません。


(コメント 2015/01/06 22:35 の回答)

リソースにアクセスするには、getClass().getResource(String)でなければなりません。
DATファイルはEclipse上ではファイルとしてもアクセスできますが、JARの中のファイルはFileInputStreamなどではアクセスできません。

おそらくEclipseでアクセスしているDATファイルは、クラスパスに含まれるものとは別のものです。Eclipseならば、Java以外のリソースファイルはbinディレクトリーにコピーされているはずです。Eclipseで実行する場合はbinがクラスパスになります。
Eclipseで実行する場合は、binの下でない方にアクセスしているのではないでしょうか。getClass().getResource(String)でアクセスしている画像ファイルは、binの下のものを参照しているため、JARに入れた後でも参照できているのです。

「プログラムが起動中に設定された内容はどこに記憶するのか?」ですが、

1つ目は、専用の作業ディレクトリーを作る方法です。
有名なプロダクトの多くでも、たとえばMaven2なら$HOME/.m2、Gradleなら$HOME/.gradleのようなディレクトリーを作成して、そこにファイルを格納しています。
$HOMEでなく、JARファイルと同じかカレントディレクトリーに作るケースもあります。

2つ目は、java.util.prefsというAPIを使う方法です。
これは、WindowsのレジストリーのようなPreferencesという仕組みを使うものです。設定ファイルをどこに格納するかを考えなくても設定を読み書きすることができます。
ただし、セキュリティー上、誰でも自由にアクセスできるとは限りません。

パッケージ java.util.prefs (Java SE 8 APIドキュメント)
Preferences APIを使用してオブジェクトを保存する (IBM developerWorks

3つ目は、何かしらのリモートリソースを使って保存する方法です。
JDBCとか、Webサービスのようなものを使って、ネットワーク上のリソースに保存します。
この方法は、実行時にそのサーバーがアクセスできる環境にあることが必要になりますし、セキュリティーの問題が発生します。

投稿2015/01/06 13:22

argius

総合スコア9388

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

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

退会済みユーザー

退会済みユーザー

2015/01/06 13:35

arguis様、ご回答有難うございます。 jarコマンドが使えないので、拡張子をzipにして解凍してみました。パッケージの「.」毎にフォルダ分けされていた最深部に他のクラスファイルと同じ位置に問題のデータは有りました。Eclipse側でもパッケージ内にソースファイルとともに置いてあるので、問題はないと思われます。画像に関してはJAR側でも読み込まれるので、パスの問題だとは考えにくくて… JAR内部のDATを書き換えれないのは驚きです!てっきり過着換えることができるものだと^^; となると、プログラムが起動中に設定された内容はどこに記憶すればよいのですか? どうしても、JARの外でなければならないのでしょうか。
argius

2015/01/06 14:09

コメントに書ききれませんでしたので、回答欄に追記しました。
退会済みユーザー

退会済みユーザー

2015/01/06 14:36

arfius様、返信有難うございます。 改めて確認したところ、Eclipse側でCheckBoxの値を変更する動作をテストしましたが、binの方にあるDATファイルを弄っていることを確認しました。src側ではなかったようです。 どうやって情報を保持しようか悩んでいましたが、java.util.prefsについて調べてみようと思います。なるべく、JAR一つで済むようにしたいと思っていますので。 どの情報も初めて知るものばかりで、眼から鱗です^^; 貴重な情報をありがとうございます!
退会済みユーザー

退会済みユーザー

2015/01/06 15:59

java.util.prefsについて、調べて自分なりに実装致しました。 その結果、全ての問題は解決し、プログラムがJAR単体で動作するようになりました! この度は、本当にありがとうございました。java.util.prefs、便利なので今後も活用したいと思います。
argius

2015/01/06 16:09

DATはbinにある方を操作していたんですね。そこは予想外でした。 大抵は、Eclipse上で見えているファイルを操作しようとしてしまうのではないかと予想していましたので... ともあれ、完成おめでとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問