2013-08-31 27 views
-1

如果我結束客戶端會話EOFException被拋出,但我讀到,這將是正常的 所以我只是開始一個新的線程具有相同的功能,但餐廳=空值; 雖然我寫了一個txt文件EOFException之後變量=空

public void run(){ 

    try { 
     ois= new ObjectInputStream(clientside.getInputStream()); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    try { 
     oos = new ObjectOutputStream(clientside.getOutputStream()); 
    } catch (IOException e3) { 
     // TODO Auto-generated catch block 
     e3.printStackTrace(); 
    } 

    handlerequest(ois,oos);// exit(); 
} 

我不認爲你需要我的請求處理程序的代碼,所以我不會將其固定,以減少垃圾郵件的代碼。它調用下面的方法是requesthandler

String tempRestaurant=null; 
try { 
    fr = new FileReader("Restaurant.txt"); 
} catch (FileNotFoundException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 
try { 
    fr.read(cbuf); 
} catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 
tempRestaurant=String.valueOf(cbuf); 
System.out.println(tempRestaurant); 
try { 
    oos.writeObject(tempRestaurant); 
} catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 
    try { 
    fr.close(); 
} catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
}  

I'm盼着看你的幫助請寫,如果你需要更多的信息代碼等:) 這是低於該退出客戶端

後所引發的異常
java.io.EOFException 
    at java.io.ObjectInputStream$BlockDataInputStream.peekByte(Unknown Source) 
    at java.io.ObjectInputStream.readObject0(Unknown Source) 
    at java.io.ObjectInputStream.readObject(Unknown Source) 
    at prealphaserverpackage.clientsidethreads.setRestaurant(Serverpart.java:164) 
    at prealphaserverpackage.clientsidethreads.handlerequest(Serverpart.java:205) 
    at prealphaserverpackage.clientsidethreads.run(Serverpart.java:96) 
Exception in thread "Thread-3" java.lang.NullPointerException 
    at java.io.PrintWriter.write(Unknown Source) 
    at prealphaserverpackage.clientsidethreads.setRestaurant(Serverpart.java:177) 
    at prealphaserverpackage.clientsidethreads.handlerequest(Serverpart.java:205) 
    at prealphaserverpackage.clientsidethreads.run(Serverpart.java:96) 

我添加知道你的代碼,我的,但仍然是EOFException類已經拋出後的餐廳空...

+0

一個更具體和更好解釋的問題將更容易幫助:) –

+1

你會得到很多'NullPointerException'你應該嘗試抓住洞塊而不是每個語句 – nachokk

+0

thx那個tipp –

回答

-1

固定它

我忘了補充開關殼體SZENARIO斷裂線在我的請求處理SRY是我的錯...幫助我避免EOFException類:)

THX
0

建議:

public void run(){ 
    try(
     ObjectInputStream ois = 
     new ObjectInputStream (clientside.getInputStream()); 
     ObjectOutputStream oos = 
     new ObjectOutputStream(clientside.getOutputStream())) { 
     handleRequest(ois, oos); 
    } 
    catch(IOException e) { 
     e.printStackTrace(); 
    } 
} 

void handleRequest(ObjectInputStream ois, ObjectOutputStream oos) { 
    try(BufferedReader fr = 
      new BufferedReader(new FileReader("Restaurant.txt"))) { 
     String tempRestaurant = fr.readLine(); 
     System.out.println(tempRestaurant); 
    } 
    catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

試穿與資源密切的Closeabletry()

+0

我以爲我會更好用於調試以獲得每個異常pri nted out ... –

+0

試用資源關閉幫助我避免eofexception thx :) –

0

宣佈你可以(而且通常應該)把try塊內的多條語句,如果他們有共同的異常處理要求;例如

try { 
    ois = new ObjectInputStream(clientside.getInputStream()); 
    oos = new ObjectOutputStream(clientside.getOutputStream()); 
    handlerequest(ois,oos); 
} catch (IOException ex) { 
    ex.printStackTrace(); 
} 

但另一方面是,當你處理異常時,你需要確保異常處理程序做正確的事情。打印堆棧跟蹤,然後繼續,如果沒有發生任何事情很少正確的事情要做。例如,在您的原始run()方法中,如果有打開流的IOException,您的代碼仍將嘗試呼叫handlerequest ...將ois和/或oos傳遞給(可能)null的實例。這不是正確的做法!最後,如果您使用的是Java 7,則可以在單個處理程序中捕獲多個異常;例如

String tempRestaurant=null; 
try { 
    fr = new FileReader("Restaurant.txt"); 
    fr.read(cbuf); 
    tempRestaurant = String.valueOf(cbuf); 
    System.out.println(tempRestaurant) 
    someOtherMethod(); ; 
    oos.writeObject(tempRestaurant); 
    fr.close(); 
} catch (IOException, SomeOtherException ex) { 
    ex.printStackTrace(); 
} 

並且您可以使用「試用資源」在完成後自動關閉它們:例如,

String tempRestaurant=null; 
try (FileReader fr = new FileReader("Restaurant.txt")) { 
    fr.read(cbuf); 
    tempRestaurant = String.valueOf(cbuf); 
    System.out.println(tempRestaurant); 
} catch (IOException ex) { 
    ex.printStackTrace(); 
} 
+0

所以我應該怎麼做才能解決它,他們不是null? –