★★Java質問・相談スレッド182★★

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (アウアウウー Sa73-AAco [106.132.135.194])
垢版 |
2018/11/19(月) 11:37:06.10ID:C68x9bSia

プログラミング言語Javaに関する質問スレです。
JavaScript, Ajaxの質問は、ここでは受け付けていません。
Web製作管理    http://pc11.2ch.net/hp/
Webプログラミング http://pc11.2ch.net/php/
をご利用下さい。

よくある質問
・「コマンドまたはファイル名が違います」
 「'javac' は、内部コマンドまたは外部コマンド、
 操作可能なプログラムまたはバッチ ファイルとして認識されていません。」
 「Exception in thread "main" java.lang.NoClassDefFoundError: 」
 (p)ttp://www.wikiroom.com/java/?path,classpath
・「\12288 は不正な文字です。」
文字リテラル以外で全角スペースは使えません。半角スペースに。
・その他の質問→「APIのjavadoc見ろ」
・String に == は使うな。equals() を使え。※

質問時の心得
・コンパイルエラーか実行時エラーか、エラーではないが意図しない動作なのかはっきりしろ。あとエラーメッセージちゃんと読め。
・前提条件としてOS、開発環境、バージョン、使用フレームワーク等を明記。

前スレ
★★Java質問・相談スレッド181★★
https://mevius.5ch.net/test/read.cgi/tech/1518252580/
VIPQ2_EXTDAT: checked:vvvvvv:1000:512:----: EXT was configured
2019/03/28(木) 21:44:55.82ID:DnYr279r0
Java SE 11で止めたみたいね
2019/03/28(木) 21:59:24.58
じゃあJavaでGUIってどうなんの?
そもそも想定されてないの?
2019/03/28(木) 22:40:07.29ID:eBl2daiha
ググれば山のように出てくるのに何で聞くの?
158デフォルトの名無しさん (ラクペッ MMab-SZwg [134.180.1.223])
垢版 |
2019/03/28(木) 22:54:34.01ID:K2f2dATQM
ID消してる奴とか相手にするなよ
2019/03/29(金) 00:02:31.06
とっかかりの所だけ教えて欲しい
アマゾンで書籍を検索してもSwingだのJavaFXだのヒットしても出版年がどれも4,5年以上前のモノばっかり
俺は新しい技術で学習したいのに、仮にSwingで学んだとしても世間で役に立たなくなってしまうようなのはさすがにいや
160デフォルトの名無しさん (ワッチョイ bf02-PjTv [175.134.57.7])
垢版 |
2019/03/29(金) 03:35:37.24ID:SC13fhfQ0
>>154
JDKに含めて配布するのを止めただけでは?あのライブラリそのものはフリーで生き続けてると思うが。
161デフォルトの名無しさん (ワッチョイ bf02-PjTv [175.134.57.7])
垢版 |
2019/03/29(金) 03:37:10.81ID:SC13fhfQ0
>>159
君が新しいの作って世界中に広めれば良い。
2019/03/29(金) 06:19:17.41ID:K/KVc7630
>>159
Java自体の先行きが怪しいのに…
2019/03/29(金) 12:23:07.42ID:6mM1A6nEa
>>159
まあでも4,5年は生き残っている技術ではあるわけで
最新の技術は明日消えてもおかしくない
swing, spring, javafx あたりでいいんじゃないの
個人的には java そのものを進めないけどな
164デフォルトの名無しさん (アウアウウー Sa9b-dxKi [106.132.132.117])
垢版 |
2019/03/29(金) 13:43:50.35ID:yvHYr2oUa
Kotlinもよろしく
2019/03/29(金) 14:20:06.19ID:sD1xGsa70
>>159
Swingが一番いい。昔から安定してるし、使いやすいし、
分かり易く、美しく、プログラマからはコントロールしやすい。
恐らく現存する ToolKit の中でも最も美しい設計だと思われる。
166デフォルトの名無しさん (ワッチョイ 3761-ycr5 [218.231.141.137])
垢版 |
2019/03/29(金) 17:55:11.26ID:ueEql8o20
Kotlinだと探せば、Swingを美しくラップしてくれるライブラリとかありそうだけどな。
DSLで宣言的に書けるような。
2019/03/29(金) 18:49:42.37ID:Zeo6kkdW0
>>159
Java FXは死亡したのでSwingを使うことになるが
Swingは全然新しくなってないので古い資料で十分
新しくなる見込みもない

「JavaGUIプログラミング JavaSE6対応」のVol.1とVol.2買っとけ
2019/03/29(金) 20:21:36.86ID:llWWvfq2r
swingがいいと思う。
pure java で使いやすい。
169デフォルトの名無しさん (アウアウウー Sa9b-dxKi [106.132.132.117])
垢版 |
2019/03/29(金) 20:54:44.53ID:yvHYr2oUa
え?Swing はベースが awt だから pure java ではないよな?
2019/03/29(金) 21:02:05.08ID:FFMJozVB0
私の小鳥は何処?
2019/03/29(金) 22:41:41.56ID:jCJGGG5lM
>>169
ん?
2019/03/29(金) 22:59:32.50ID:llWWvfq2r
ちょっと何言ってんのか分かんないっす。
2019/03/29(金) 23:02:34.96ID:FFMJozVB0
馬鹿乙
174デフォルトの名無しさん (ワッチョイ 9701-g8C6 [126.161.134.139])
垢版 |
2019/03/30(土) 17:29:34.66ID:2+xyc9oI0
初心者なんですがクラスでインポートしたクラスインスタンスを作った後にそのインスタンスをメインメソッドで呼び出すって事は出来ないんですか?
175デフォルトの名無しさん (ワッチョイ bf01-Gaau [111.90.7.238])
垢版 |
2019/03/30(土) 19:26:42.86ID:M3wvGATb0
>>174
ちゃんと説明して!
176デフォルトの名無しさん (ワッチョイ 9701-g8C6 [126.161.171.50])
垢版 |
2019/03/30(土) 20:43:48.96ID:ngbl3dxd0
>>175
ちゃんとエスパーしてください
2019/03/30(土) 20:54:22.07ID:XWeRwMKO0
こんな感じか

public class Test{
static String s = new String("a");
public static void main(String[] args){
System.out.println (s) ;
}
}
178デフォルトの名無しさん (ワッチョイ 9701-g8C6 [126.161.166.59])
垢版 |
2019/03/31(日) 02:11:44.91ID:9aPRYZvk0
えーとですね例えばリストクラスとかをあるクラスにインポートしてインスタンス化した後そのインスタンスをメインメソッドのあるクラスで呼んで使う場合どうすればいいのかと考えたんです。

今のところメインメソッドのあるクラスでしかインポートした事ないので他のクラスでリストなどの配列処理をさせてその処理の結果をメインメソッドで出力したいのです。
179デフォルトの名無しさん (ワッチョイ bf02-9gjM [175.134.57.7])
垢版 |
2019/03/31(日) 06:06:39.63ID:x4Dlbn8C0
>>178
そのクラスのメソッドから List のインスタンス返せば良いだけでは?
何に悩んでるかよくわからない。
180デフォルトの名無しさん (ワッチョイ 3761-ycr5 [218.231.194.81])
垢版 |
2019/03/31(日) 09:18:12.51ID:RM3UTWN00
staticメソッドとインスタンスメソッドの区別がついてないだけだろ。
2019/03/31(日) 10:00:29.29ID:bS6sgKsX0
staticでない変数をstaticコンテキストから参照することはできません
182デフォルトの名無しさん (ワッチョイ 9701-g8C6 [126.161.184.247])
垢版 |
2019/03/31(日) 10:11:45.90ID:CwgH065r0
>>179
返信ありがとうございます
そのやり方をコードで見せてもらえませんか?
2019/03/31(日) 10:14:59.85ID:5L0dnt340
これでいいんじゃね?何も難しいことない。

*** TestMain.java ***

package testPackage;

import java.util.List;

public class TestMain {
  public static void main(String[] args) {
    TestSub testSub = new TestSub();
    List<String> myList = testSub.getList();
    System.out.println(myList);
  }
}

*** TestSub.java ***

package testPackage;

import java.util.ArrayList;
import java.util.List;

public class TestSub {
  public List<String> getList() {
    List<String> strList = new ArrayList<>();
    strList.add("a");
    strList.add("b");
    return strList;
  }
}
2019/03/31(日) 10:21:19.41ID:dQUnpGay0
初心者スレでやれよ
185デフォルトの名無しさん (ワッチョイ 9701-g8C6 [126.161.184.247])
垢版 |
2019/03/31(日) 10:32:54.83ID:CwgH065r0
>>183
ありがとうございます!!メソッドの中でインスタンスを生成するのとそのインスタンスメソッドをメインメソッドで代入する時の型はどうすればいいのかが分かんなかったんです。

ただ自分のコードで書いたらメインJavaの操作は安全ではありませんと出てコンパイルエラーになる(´・ω・`)
186デフォルトの名無しさん (ワッチョイ 9701-g8C6 [126.161.184.247])
垢版 |
2019/03/31(日) 10:43:23.73ID:CwgH065r0
調べたらエラーじゃなくて警告なんですね実行できました!!初心者スレでするべきでしたね答えてくれた方々ありがとうございました^_^
2019/04/01(月) 01:52:33.40ID://wZRuJn0
>>177
こら!StringのコンストラクタにString渡すんじゃない!
188デフォルトの名無しさん (ワッチョイ e394-c04X [123.48.66.92])
垢版 |
2019/04/06(土) 13:59:48.50ID:2ennWA4x0
メインアプリのプロジェクトA
そのアップデータのプロジェクトB
があります。メインアプリもアップデータも自己完結型パッケージにして
1個のzipかインストーラでインストールする予定です。
あとBからAのクラスを参照したい。

それで今こう考えてるんですが妥当なのかどうか。
・プロジェクト参照でBの開発中にAのクラスやライブラリを参照することができる
・自己完結型パッケージにするときAとBでclassファイルやjarを共通化できる?
・実行可能ファイルが複数あっても自己完結型パッケージにできる?
189デフォルトの名無しさん (ワッチョイ e394-c04X [123.48.66.92])
垢版 |
2019/04/06(土) 14:08:17.53ID:2ennWA4x0
疑問を追加します
・自己完結型パッケージにおいて、アップデータを実行しているJREをアップデータが更新できるのか?
190デフォルトの名無しさん (ワッチョイ e394-c04X [123.48.66.92])
垢版 |
2019/04/06(土) 14:34:50.23ID:2ennWA4x0
加えます。
・Java8よりJava9以降のJigsaw対応バージョンの方が自己完結型パッケージのサイズは小さくなる?
・ライセンスを確認したところ独自のソフトウェアと同梱する場合JDKを再配布しても良いようだった。
https://www.oracle.com/technetwork/jp/articles/java/ja-topics/jdk-release-model-4487660-ja.html
>「ユーザーが開発したソフトウェアとともに配布すること」という制限事項があります
・アップデータでインストールされた自己完結型パッケージのJRE部分を丸ごと削除して新しいものに置き換える動作はライセンスの範囲内のように読める。

つまりデスクトップアプリでメインアプリ+アップデータという構成でどうやればいいのかなと。
自己完結型パッケージ+Java8とか考えてるんですが、
OpenJDKなのかOracle JDKなのかとか選択肢が多くてちょっと混乱してます。
191デフォルトの名無しさん (ワッチョイ e394-c04X [123.48.66.92])
垢版 |
2019/04/06(土) 14:45:29.44ID:2ennWA4x0
・AdoptOpenJDKというのがあり、OracleJDKやOpenJDKなどと異なる”ビルド”であると
説明されますが、ソースコードが同じなのにビルドでどれだけ変わるんですか?
これまでOracleJDKで開発してきたソースコードはAdoptOpenJDKに移行すると問題が生じますか?
192デフォルトの名無しさん (ワッチョイ e394-c04X [123.48.66.92])
垢版 |
2019/04/06(土) 15:18:21.79ID:2ennWA4x0
Javaのビルドについて考えてるとブラウザのタブがどんどん増えていく・・・
Correttoが良さそうですね。

HotSpotの代用としてGraalVMが作られているようで、じきにこれがHotSpotを性能で上回るでしょう。
しかも少なくとも商業的にはOracleが独占的ライセンスを維持する可能性が高く、
Oracle以外のJREでは利用できないでしょう。
つまりOpenJDKビルドが乱立している状況はHotSpotが自由なライセンスで公開されている事に依存していて、
OracleがGraalを始動させたら終わってしまうかもしれないということです。
現時点でGraalはHotSpotの性能を上回っていません。
193デフォルトの名無しさん (ワッチョイ e394-c04X [123.48.66.92])
垢版 |
2019/04/07(日) 10:19:05.70ID:cWSWTJIR0
何で自己完結型はJREを含めるのにexeを作るんだ?
同梱されたJREで ./path/to/jre/bin/java app.jar でいいだろ
2019/04/07(日) 11:27:31.20ID:PGBDtD6t0
それでいくら払えるの?
195デフォルトの名無しさん (ササクッテロ Sp49-CDF1 [126.33.102.109])
垢版 |
2019/04/08(月) 18:05:51.31ID:wSfHRAdHp
ポリモーフィズムって過程はともかく同じメソッドの呼び方で様々な結果が出れば良いって考えなんだけど違う?
196デフォルトの名無しさん (ワッチョイ e394-c04X [123.48.66.92])
垢版 |
2019/04/08(月) 18:13:17.86ID:4OqfLsPj0
クラス、抽象クラス、interfaceと多数の型を備えている事では?
197デフォルトの名無しさん (ワッチョイ abda-6m8T [121.115.237.243])
垢版 |
2019/04/08(月) 21:56:49.44ID:+97MZh9m0
異なる具象クラスのインスタンスを
まとめてメソッドに渡せる仕組みだと勝手に思ってる

象クラス、麒麟クラス、うさぎクラス
まとめて受け取る動物メソッドみたいなもん
198デフォルトの名無しさん (アメ MMe1-3NqX [210.142.96.72])
垢版 |
2019/04/09(火) 01:24:14.25ID:03qzHG/tM
バナナゴリラジャングル問題
199デフォルトの名無しさん (アウアウウー Sa91-T5wd [106.132.124.226])
垢版 |
2019/04/09(火) 13:15:30.33ID:xq+Mg1lAa
レールの幅が同じなら違う車両も乗せて走らせられるみたいな
200デフォルトの名無しさん (ワッチョイ e394-c04X [123.48.66.92])
垢版 |
2019/04/09(火) 22:43:07.81ID:3cQd1WBf0
”様々な結果が出れば良い”
これだと引数が違えば違う結果が出るから妥当じゃない
逆に異なる型の異なるメソッドを呼び出したとしても同じ出力になるかもしれない
1種類の型に対して定義されたメソッドが複数の型に対して機能する、ってことだ
2019/04/11(木) 23:44:09.20ID:jdRk1pWI0
Function<A, B>とFunction<B, R>を合成してFunction<A, R>にしたい
そしてふたつのConsumer<T>を合成してConsumer<T>にしたい
教えてクレメンス
202デフォルトの名無しさん (ワッチョイ 1e01-AWLV [111.90.21.145])
垢版 |
2019/04/12(金) 00:40:24.29ID:lCQDwLY00
>>201
andThenメソッドでどう?
203デフォルトの名無しさん (ワッチョイ d302-eS/W [106.158.104.38])
垢版 |
2019/04/12(金) 01:37:06.31ID:kPkxqpeR0
>>200
歴史的な経緯もある。
オーバーロード・オーバー・ライドの多態性が先で、テンプレート(ジェネリクス)が後だから、時代によって勧める多態性が違う。
204デフォルトの名無しさん (ワッチョイ d26a-U5P5 [61.120.247.131])
垢版 |
2019/04/12(金) 15:11:37.91ID:f02m+jwt0
EclipseでコンパイルレベルJDK11までしか選べないんだけど
まだJDTが12まで対応してないとか?
205デフォルトの名無しさん (ワッチョイ d26a-U5P5 [61.120.247.131])
垢版 |
2019/04/12(金) 15:23:21.41ID:f02m+jwt0
自己解決。ベータ版のプラグインを入れる必要があったようで
2019/04/12(金) 16:44:45.43ID:LhXUTlO1M
>>204
eclipseはJDK8と心中だろう
そんな最新のJDK使える開発で未だにeclipseに拘る意味がわからない
いい加減IntelliJに乗り換えろよ
2019/04/12(金) 16:47:18.07ID:ob9MV6nx0
有料じゃないと使えないとか
208デフォルトの名無しさん (ワッチョイ d26a-U5P5 [61.120.247.131])
垢版 |
2019/04/12(金) 22:41:55.90ID:f02m+jwt0
IntelliJは使ったこと無いな
NetBeansよりオススメ?
209デフォルトの名無しさん (ワッチョイ d26a-U5P5 [61.120.247.131])
垢版 |
2019/04/13(土) 00:02:18.39ID:UkAWtOas0
試しにNetBeans, IntelliJ両方入れてみたけど重くてもEclipseのUIが一番でしょ
2019/04/13(土) 09:14:21.94ID:zAmtHmMK0
Eclipseって立ち上げが異様に遅くない?うちだと2分くらいかかるよ。Windowsのアップデートが来るとうんざりする。
2019/04/13(土) 19:18:26.87ID:a4r2Gpw40
IBMは何でEclipseで無駄な開発をしたのかね。無償提供して何か報われたのかな。
2019/04/13(土) 19:27:05.58ID:vzJQEXVg0
当時はeclipseに代わるもの無かったし
213デフォルトの名無しさん (ワッチョイ 0f2e-AWLV [118.86.132.191])
垢版 |
2019/04/13(土) 20:14:34.32ID:osnUgzxu0
>>211
それを言うなら日本はなんでアメリカと戦争したのかね
核を落とされただけじゃないか
2019/04/13(土) 20:57:38.93ID:Puj10Jqk0
爺さんのプライドのためだよ
2019/04/14(日) 01:30:00.79ID:zEHeHyPc0
>>202
さんくす
ちゃんと合成できたわ
2019/04/14(日) 01:33:26.33ID:zEHeHyPc0
>>208
オヌヌメ
UIが好き勝手にできる (そりゃ当たり前か?)しかっこの前にスペースを入れる入れないとか細かい次元で設定もできる、おまけにリファクタリングが充実してる
欠点としてはズームで拡大縮小ができないことぐらいかな
CommunityエディションでもすごいけどUltimateエディションだともっとすごい
OSSとか開発してるならただで手に入るから試してみ
217デフォルトの名無しさん (ワッチョイ 1e02-yKKz [175.134.57.7])
垢版 |
2019/04/14(日) 11:06:33.13ID:JuY/4ckm0
Kotlinもよろしく
218デフォルトの名無しさん (ワッチョイ 5294-U5P5 [123.48.66.92])
垢版 |
2019/04/14(日) 22:01:17.23ID:W2teM0KI0
jvmのgcは実際どれくらいのラグを引き起こすものなの?
例えばメモリ1GBくらい使ってるアプリで
219デフォルトの名無しさん (ワッチョイ 5294-U5P5 [123.48.66.92])
垢版 |
2019/04/14(日) 22:02:44.54ID:W2teM0KI0
java8のGCで。デフォだとパラレルGCだな。
コンカレントGCだとどれくらいなんだろう。
2019/04/14(日) 22:39:42.36ID:JOroMq8K0
>>216
そんな機能いらんだろ・・・
221デフォルトの名無しさん (ワッチョイ 5294-U5P5 [123.48.66.92])
垢版 |
2019/04/15(月) 02:16:43.52ID:cuQSJXma0
JVMからデバイスドライバの機能を呼び出す事ってできます?
Javaで特殊デバイスと連携するプログラムは開発できるのかなとおもって
222デフォルトの名無しさん (ワッチョイ 1e02-yKKz [175.134.57.7])
垢版 |
2019/04/15(月) 10:56:39.66ID:JaYwanV70
>>221
普通はJNIで橋渡しする部分を作る必要があると思う。

しかしLinuxみたいに特殊なファイルに読み書きするだけである程度の操作ができるようなOS及びデバイスドライバならばファイルの読み書きだけでなんとかなってしまうかも知れない。
rootユーザーにならないと駄目かも知れないけど。
223デフォルトの名無しさん (ワッチョイ 1e02-XGqV [175.134.57.7])
垢版 |
2019/04/15(月) 11:14:12.89ID:JaYwanV70
しかし例え Linux だったとしてもなるべく /dev や /sys 以下の特殊ファイルを直接読むように作るんじゃなくて読み書き用のコマンド実行するように作った方が良いかも。
というのは kernel のアーキテクチャやバージョンによって同じファイルが違ったりなかったりするかも知れないから。

例えばLinuxでCPUの温度を取得する方法が書いてあるページが以下にあるが、 /sys/devices/platform/coretemp.0/temp[0-9]_input または /sys/class/thermal/thermal_zone0/temp を読めばいいことになっている。
https://qiita.com/koara-local/items/1fac13704123717f5cc8
しかし lm_sensors をインストールして sensors コマンドで読むようにした方が良い。
その方が違いがあってもそこで吸収してくれる可能性があるし、Windows 等の他の OS だったとしても同じ形式で出力をするコマンドがあれば(またはなければ自作すれば) Java の方のプログラムを変えなくて済むからだ。
224デフォルトの名無しさん (ワッチョイ 5294-U5P5 [123.48.66.92])
垢版 |
2019/04/15(月) 13:57:59.38ID:cuQSJXma0
OSGiの説明読んでたら実行時に依存ライブラリを置き換えれるみたいに書いてあったんだけど
危なくない?
225デフォルトの名無しさん (ワッチョイ 2361-La48 [218.231.194.129])
垢版 |
2019/04/15(月) 16:31:32.77ID:qwL+GUlh0
クソ古い機種でなければ、SELinuxが邪魔するはずだ。
226デフォルトの名無しさん (ワッチョイ 2361-La48 [218.231.194.129])
垢版 |
2019/04/15(月) 16:33:08.61ID:qwL+GUlh0
ごめん。Androidスレと勘違いした。
2019/04/17(水) 09:29:11.77ID:u6KluhBw0
新しいswitch構文いいね
Java13でも何か増えてほしい
228デフォルトの名無しさん (アウアウウー Sae3-UFLJ [106.132.123.80])
垢版 |
2019/04/17(水) 16:59:30.42ID:ZvmEwgGQa
まるで Kotlin のような switch だなあれ。
こうやって徐々に拡張してって気づいたら Kotlin そっくりになってたりしてなw
229デフォルトの名無しさん (ワッチョイ 7f94-61/s [123.48.66.92])
垢版 |
2019/04/18(木) 18:04:38.09ID:wChKEQpu0
JavaFX11をJava8で動かす事はできる?
例えばCorretto8とかで
2019/04/18(木) 20:11:19.95ID:Hosp3yF6M
JavaFXはもうJavaファミリーじゃなくて単なる野良ライブラリの一つだから他所で聞いて
2019/04/19(金) 00:53:02.95ID:PyPy8gHp0
substance.jarとかlookandfeelのライブラリもみんな死んだよなあ
232デフォルトの名無しさん (オッペケ Sr33-EG0x [126.208.177.191])
垢版 |
2019/04/19(金) 20:15:42.29ID:9+uD8sSlr
arrayListのaddメソッドについて質問です。
中身のないリストに、インデックス無しのaddメソッドで中身を追加していくと
0.1.2.3〜順番に自動でインデックスを付けてくれました。

この挙動は信頼して良いでしょうか?
それとも引数無しでaddしていくと、稀にインデックスがおかしくなったりしますか?
2019/04/19(金) 20:33:56.27ID:8v3VlEds0
char型配列についてお聞きしたいことがあります。例えば
char[] array = {'J','a','v','a'};
とした時、array[4]が「何もない(空である)」ことはどうコードで検出すればよいのでしょうか?
if文などで、4要素目が「空である」ことを検出するコードを書きたいのですが…。
2019/04/19(金) 23:18:37.51ID:Bzn5o3i30
>>233
配列の長さを調べる。
235デフォルトの名無しさん (ワッチョイ 5f2e-R4YC [118.86.92.221])
垢版 |
2019/04/20(土) 00:35:16.58ID:CMR5Akfm0
>>232
ArrayListのaddはリストの最後に値を追加するから
値を追加した順番にインデックスがつけられることは保証されるよ
236デフォルトの名無しさん (ワッチョイ ffda-EG0x [223.218.244.7])
垢版 |
2019/04/20(土) 06:05:00.74ID:FdhFaaGT0
>>235
ありがとうございます。
237デフォルトの名無しさん (ワッチョイ 7f94-61/s [123.48.66.92])
垢版 |
2019/04/20(土) 20:06:24.28ID:JruJqlnL0

jar実行時のカレントディレクトリが環境によってまちまちだって聞いたんだけど本当?


コマンドラインでディレクトリAに居ながらjavaコマンドでディレクトリBのjarを起動したら
そのjarの中でカレントディレクトリはAとBどちらになる?
238デフォルトの名無しさん (ワッチョイ 7f94-61/s [123.48.66.92])
垢版 |
2019/04/20(土) 20:36:06.72ID:JruJqlnL0
2を自分で実験してみたんですが
コマンドラインのカレントディレクトリがjar内部でもカレントディレクトリですね。
つまり./folderを作成したら、コマンドラインの位置に出現する。
2019/04/20(土) 22:30:51.50ID:ZG2GZstI0
new File(".").getCanonivalPath()
あってるかどうかは知らん
2019/04/20(土) 22:53:08.89ID:8ST0JapT0
>>234
返信が遅くなりすいません。
ありがとうございました。
241デフォルトの名無しさん (ワッチョイ ff02-YIQo [175.134.57.7])
垢版 |
2019/04/21(日) 15:13:37.03ID:oGsU9OH20
>>239
シンボリックリンクを手繰っても良い場合はそれでも良くて、ダメな場合は Paths.get(relativePath).toRealPath(LinkOption.NOFOLLOW_LINKS) のようだ。
https://qiita.com/nwtgck/items/5dd7a3008a5a31bf964e
242238 (ワッチョイ 5a94-BP9Y [123.48.66.92])
垢版 |
2019/04/25(木) 08:51:23.69ID:ximnnd2X0
これやばくないですか?
プロジェクトのトップからの相対パスで色々なファイルを指定する事は珍しくないはずです。
そうして作られたjarをコマンドライン等から呼び出すとき
カレントディレクトリが狂わないように調整する必要がある。
相対パスのFileオブジェクトの参照先はカレントディレクトリ依存ですよね?
しかもカレントディレクトリがどうなるかは環境依存ですよね?

と思ったらjavaコマンドの引数で-Duser.dirを指定すればいいようです。
でも、デスクトップアプリだと、環境別に起動スクリプト書かなきゃまずいですね。
エンドユーザーは-Duserr.dirを指定しません。
どこから呼び出しても良いようにしたい、エンドユーザーの利便性のためなのに、
起動スクリプトを使うのは本末転倒な気がします。
と言ってもコマンドラインから呼び出す場合しか実際問題にならないだろうけど。

https://bugs.java.com/bugdatabase/view_bug.do?bug_id=4045688
user.dirは起動後だと修正不可能。
2019/04/25(木) 09:45:05.55ID:sal5bxLGM
>>242
カレントディレクトリに依存しないように
プログラム組めばよいし
カレントディレクトリに依存するなら
シェルスクリプトやバッチファイルで
カレントディレクトリを指定するのがセロリーですよ
2019/04/25(木) 09:46:41.65ID:sal5bxLGM
プロジェクトのトップからの相対パスになるんだなんて
思い込みがなければ問題ナッシング
245デフォルトの名無しさん (ワッチョイ 5a94-BP9Y [123.48.66.92])
垢版 |
2019/04/25(木) 09:57:47.94ID:ximnnd2X0
カレントディレクトリに依存してはいけないというなら、
相対パスを使えないという事になるのでは?
しかし絶対パスはたびたびOSのユーザー名など個人情報が入ります。
できれば扱いたくない。
246デフォルトの名無しさん (ワッチョイ 5a94-BP9Y [123.48.66.92])
垢版 |
2019/04/25(木) 10:11:29.05ID:ximnnd2X0
http://d.hatena.ne.jp/yomama/touch/20080718/1216394398
やはりいい方法が無いと。

それどころか、リソースファイルを取得する時URLクラスで相対パスを使うのが
ベストプラクティスとして紹介されている事がある。
それはカレントディレクトリに依存するのか?クラスパス依存だから問題ない?
そもそも、クラスパスが相対パスだったらカレントディレクトリ依存で解決されるだろう。

どうやって相対パスを使わずに組むんだ?
2019/04/25(木) 10:44:52.10ID:w8/bGs7/0
エクスプローラーから直接実行ファイルをダブルクリックしたら、そこがカレントディレクトリじゃないの?
ショートカットを作成して、それをデスクトップとか他のフォルダに置いた場合、
そのショートカットのプロパティをみると、「作業フォルダー」ってのがあって、それがカレントディレクトリではないかと。
2019/04/25(木) 11:24:18.30ID:DeQsB6RVM
>>246
どんな実行方法でもjarがある場所をベースにしたいってことならjarファイルのパスを取得してそこから相対パスで扱えばよいよ
2019/04/25(木) 13:37:42.97ID:wpotMNKo0
各種リソースは、プロジェクトフォルダからの相対パスだろ

PROJECT_PATH などの定数・変数を作って、そこからの相対パスを定義すればよい
2019/04/25(木) 17:48:56.39ID:PdDg4Yo8M
>>245
パスを引数で渡したり
カレントディレクトリに依存するなら起動するときに
指定するのがセロリーだよ
2019/04/25(木) 17:53:11.84ID:PdDg4Yo8M
>>246
リソースファイルは普通クラスパスから読み込むよ
シェルスクリプトやバッチファイルで
起動時にリソースを配置したディレクトリを
クラスパスに指定するのがセロリーですよ
2019/04/25(木) 17:58:48.54ID:PdDg4Yo8M
例えば実行時にworkフォルダに相対パスでファイルを吐き出したいときは
シェルスクリプトで
cd work
のコマンドを実行してから
javaを実行するよ
2019/04/25(木) 18:14:02.08ID:PdDg4Yo8M
スクリプトからjarを実行すれば
プロキシを指定したり使用メモリの上限を指定したり
ログの出力を変えたりできるよ
エンドユーザーの利便性を考えるなら起動スクリプトを
作るべきだと思うよ
jarは直接実行するものじゃない
2019/04/25(木) 18:22:50.99ID:PdDg4Yo8M
>>249
プロジェクトフォルダってソースコードを管理する
ものだから実行時にその存在を前提にするのは設計としておかしいと思う
開発環境からしか実行しないなら問題ないけど
今回のようにjarを配布して実行してもらうならマズいですよ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況