就像瓷砖说的那样,我的 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 进入 inputstream 时,会创建一个新线程 jcifs.util.transport.Transport,该线程被简单地阻塞,应用程序创建另一个 jcifs.util.transport.Transport,依此类推。创建 8 个或 9 个 jcifs.util.transport.Transport 线程后,它被卡住了,什么也不做。
相同的代码,相同的 jcifs 库。但是在 Eclipse 上运行和在本地机器上作为可运行 jar 运行时的工作方式不同。我不知道为什么会这样。