2013-04-08 104 views
0

除了保存和/或加載數據外,它只做它需要做的一切。我假設問題是與加載即使try/catch沒有例外。該文件由插件創建的,但它不會加載,當它被關閉,這是理應保存的數據...對象序列化不起作用

完整的類可以在這裏找到:http://pastebin.com/pK3NCPfM

裝載方法:

public void getClans(){ 
     try { 
      // Load the Clans 
      FileInputStream f_in = new FileInputStream("Clans.data"); 
      ObjectInputStream obj_in = new ObjectInputStream (f_in); 
      @SuppressWarnings("unchecked") 
      HashMap<String, Clan> Clans = (HashMap<String, Clan>) obj_in.readObject(); 
      obj_in.close(); 
      getLogger().info("Clans successfully loaded"); 
      } catch (Exception e) { 
      getLogger().info("Error loading clan files..."); 
      getLogger().info(e.getMessage()); 
      } 
    } 

    public void getPlayers(){ 
     try { 
      // Load the players that are in a clan 
      FileInputStream f_in = new FileInputStream("clanPlayers.data"); 
      ObjectInputStream obj_in = new ObjectInputStream (f_in); 
      @SuppressWarnings("unchecked") 
      HashMap<String, String> clanPlayers = (HashMap<String, String>) obj_in.readObject(); 
      obj_in.close(); 
      getLogger().info("clanPlayers successfully loaded"); 
      } catch (Exception e) { 
      getLogger().info("Error loading clanPlayer files..."); 
      getLogger().info(e.getMessage()); 
      } 
    } 

更新: 我不知道爲什麼這不起作用。如果任何人都可以幫助我解決問題,我應該很好去!

public void getPlayers(){ 
     try { 
      // Load the players that are in a clan 
      FileInputStream f_in = new FileInputStream("clanPlayers.data"); 
      ObjectInputStream obj_in = new ObjectInputStream (f_in); 
      @SuppressWarnings("unchecked") 
      clanPlayers = (HashMap<String, String>) obj_in.readObject(); // Error on this line. 
      //I want the HashTable ClanPlayers to be a copy of the object that was saved 
      obj_in.close(); 
      getLogger().info("clanPlayers successfully loaded"); 
      } catch (Exception e) { 
      getLogger().info("Error loading clanPlayer files..."); 
      getLogger().info(e.getMessage()); 
      } 
    } 

回答

3

這些方法不返回任何東西,也不要初始化任何領域:只有局部變量。所以他們基本上是複雜的noop。

此外,你不應該異常。只有在這個地方可以真正處理異常時,纔會捕獲IOException。其他方面,讓異常傳播,或將其轉換爲runeim異常並拋出運行時異常。

+0

你看過整個代碼還是隻看這兩個函數?還有其他的東西可以與Clans和clanPlayers一起使用。 如果沒有try catch,如果出現錯誤,程序將會中斷並且不是首選。唯一真正發生的錯誤是當插件第一次運行。 – TheNickmaster21 2013-04-08 16:14:28

+0

我看着你在這裏發佈的代碼,所以只有這兩種方法。如果您需要更多幫助,請定義「不工作」。代碼應該做什麼,它做什麼呢?此外,捕獲和基本上忽略異常將使應用程序中斷,但只是稍後,並出於一個模糊的原因。我非常肯定,如果'clanPlayers'爲空,程序將不起作用。而這段代碼,如果發生異常,''clanPlayers'會留空。所以現在你必須猜測爲什麼'clanPlayers'爲null,而不是有一個明確的IOException來解釋問題是什麼以及它來自哪裏。 – 2013-04-08 19:06:31

+0

我已經修好了。感謝您的幫助 – TheNickmaster21 2013-04-08 19:32:29