2013-04-08 106 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