![](/img/trans.png)
[英]Java DataOutputStream / DataInputStream OutOfMemoryError
[英]DataInputStream and DataOutputStream, compiles fine but does not run the way I wanted
我正在開發一個程序,該程序以文本字段和兩個組合框的形式接受用戶輸入,並在下面顯示總計。 我已經完成所有工作,但是現在我試圖保存所選的數字,並在下次打開程序時重新讀取。 導致我相信這是通過datainputstream和dataoutput流完成的。
我已經在程序中都進行了編碼,並且可以正常編譯,但是當我嘗試輸入新數據時,它將捕獲並關閉(我對system.exit進行了編碼,以查看其是否有效)。
我可以用我的語法確定它,但是找不到。
整個程序在這里: http : //pastebin.com/9L686Pxx
編輯:格式化比我想象的要容易得多,因此這是導致程序退出的代碼塊。
try
{
int economyCount = input.readInt();
int standardCount = input.readInt();
int advancedCount = input.readInt();
int exceptionalCount = input.readInt();
int redCount = input.readInt();
int greenCount = input.readInt();
int blueCount = input.readInt();
int yellowCount = input.readInt();
}
catch(IOException io)
{
JOptionPane.showMessageDialog(null, "The program could not read the data. Please check the disk drive and then run the program again.", "Error", JOptionPane.INFORMATION_MESSAGE);
System.exit(1);
}
您需要打印或記錄堆棧跟蹤(或至少錯誤消息)以獲取所捕獲的異常。 當前,您的代碼正在丟棄導致問題的原因的證據。 (提示:在Javadoc中查看Exception.printStackTrace()
。)
或者,使用IDE的調試器運行應用程序,然后在System.exit
調用上設置一個導致該應用程序退出的斷點。 然后檢查異常以找到其類名和消息。
機會是,這將為您提供足夠的證據,以使您能夠確定和解決根本問題。 如果不是,請將完整的堆棧跟蹤添加到您的問題中。
基於當時發生異常的事實,我懷疑問題是您正在嘗試讀取尚未寫入的數據。 看起來順序是:
output
...會截斷現有文件。 input
input
讀取4個值。 哎呀! 那里還沒有...例外。 一旦超過了這一點,您的閱讀和寫作方式就會出現其他問題:
IMO,嘗試重用相同的DataInputStream
和DataOutputStream
對象是一個壞主意。 您應該每次在actionPerformed
方法中將其重新編碼為“打開,讀取,關閉”,然后每次“打開,寫入,關閉”。 input
和output
變量應該是局部變量,而不是實例變量。
您堆棧跟蹤的最新證據證實了這一診斷。
如果使用的是DataInputStream.readFully()
,則需要分別捕獲EOFException
。 這意味着您已經用盡了輸入,因此您應該關閉它並停止閱讀。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.