就像我說的那樣,我的Java應用程序無法正常工作,因爲它在Eclipse上開發時工作正常。Java應用程序在Eclipse上工作正常,但在部署爲可運行jar後無法正常工作
我完成了在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應用程序來看,似乎在某些時候停止從inputstream內部讀取while循環。 這是一個非常奇怪的案例,我從來沒有經歷過。我找不到任何解決方案。
這是因爲我的代碼或Eclipse文件可能會錯誤地生成jar文件嗎?
----------其他信息-------------------
與Edmondo1984一個很大的幫助,我找出jar程序停止。 當它從SmbFile進入inputstream時,會創建一個新的線程jcifs.util.transport.Transport,並簡單地阻塞該線程,並且該應用程序將創建另一個jcifs.util.transport.Transport等等。在創建了8個或9個jcifs.util.transport.Transport線程之後,它被卡住,無所事事。
相同的代碼,相同的jcifs庫。但是,在Eclipse上運行並在本地機器上作爲可運行的jar工作方式不同。 我不知道爲什麼會發生這種情況。
的Eclipse可能無法把正確的罐子在您的「包裝罐子」,但是這通常會導致類加載的錯誤。你在同一個文件上測試嗎? – Edmondo1984 2012-07-19 07:49:13
你必須給自己一些可見的指示器。也就是說,在一次嘗試中發現了一些有關已發生事情的意義信息。上面的錯誤消息對調試正在發生的事情很有用。 – Davos555 2012-07-19 08:23:41
@ Edmondo1984像你說的,如果Eclipse中無法添加應用程序所需的一些圖書館,它不會啓動。但它開始運行。噢,我正在測試同一個文件。 – user1537096 2012-07-19 08:34:02