タイルが言ったように、私の Java アプリケーションは、Eclipse での開発中に正常に動作するため、動作しません。
Eclipse でアプリケーションのビルドとテストを完了しました。私が期待したようにうまく動作します。クライアントがシステムで使用できないように、実行可能なjarとして展開する必要がありました。Eclipseにエクスポートして、実行可能なjarにしました。実行可能な jar を実行すると、アプリケーションはしばらく正常に動作し始め、ファイルの読み取りで停止します。Eclipseの同じコードで問題はありませんでした。
動作しないと思われるソース スニペットは次のとおりです。
sfis = new SmbFileInputStream(sFile);
in = new BufferedInputStream(sfis);
byte buf[] = new byte[(int)sFile.length()];
int pos = 0;
int size = 10;
int temp;
while((size=in.read(buf, pos, size)) > 0){
pos += size;
temp = buf.length - pos;
if(temp < 10){
size = temp;
}
}
Eclipse では問題ありません。SMB 接続からデータを完全に読み取り、ジョブを完了します。しかし、jar アプリケーションからは、ある時点で while ループ内の入力ストリームからの読み取りを停止するようです。これは私が今まで経験したことのない非常に奇妙なケースです。そして、私はこれに対する解決策を見つけることができません。
これは、私のコードまたは Eclipse によって誤って作成された可能性のある jar ファイルが原因ですか?
- - - - - 追加情報 - - - - - - - - - -
Edmondo1984 の大きな助けを借りて、jar プログラムが停止する場所を見つけました。SmbFile から入力ストリームに移動すると、新しいスレッド jcifs.util.transport.Transport が作成され、スレッドは単純にブロックされ、アプリケーションは別の jcifs.util.transport.Transport を作成します。8 つまたは 9 つの jcifs.util.transport.Transport スレッドを作成した後、スタックして何もしません。
同じコード、同じ jcifs ライブラリ。ただし、Eclipse 上で実行する場合と、実行可能な jar としてローカル マシン上で実行する場合では、動作が異なります。なぜこれが起こっているのか分かりません。