Thread: NullExceptionError when loading player save file, help me understand why it happens?

Results 1 to 2 of 2
  1. #1 NullExceptionError when loading player save file, help me understand why it happens? 
    Banned

    Join Date
    Jun 2013
    Posts
    499
    Thanks given
    119
    Thanks received
    70
    Rep Power
    0
    Wanting too implement a thing that handles in-game giveaways, the giveaway items are saved too the character file but when trying too load the character file upon logging in I get an error:

    Code:
    public class Giveaway {
    	
    	private Player player;
    	
    	public Giveaway(Player player) {
    		this.player = player;
    	}
    	
    	private Path path = Paths.get(System.getProperty("user.home") + "/Desktop/saves/characters/", player.getUsername() + ".json");
    	private File file = path.toFile();
    	
    	public void giveReward() {
    		if (!file.exists()) {
    			System.out.println("File doesn't exist");
    			return;
    		}
    		try (FileReader fileReader = new FileReader(file)) {
    			JsonParser fileParser = new JsonParser();
    			Gson builder = new GsonBuilder().create();
    			JsonObject reader = (JsonObject) fileParser.parse(fileReader);
    			
    			if (reader.has("giveaway-rewards")) {
    				List<Item> list = new ArrayList<Item>();
    				Item[] rewards = builder.fromJson(reader.get("giveaway-rewards").getAsJsonArray(),
    						Item[].class);
    				for (Item s : rewards)
    					list.add(s);
    				player.setGiveawayRewards(list);
    				for(int i = 0; i < list.size(); i++) {
    					Item item = (Item) list.get(i);
    					player.giveItem(item.getId(), item.getAmount());
    					player.sendMessage("@sup@ Congratulations on winning the giveaway, you have received: x" + item.getAmount() + " " + ItemDefinition.forId(item.getId()).getName() + "!");
    					player.removeGiveawayReward(item);
    				}
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    
    }
    Error is on
    Code:
    private Path path = Paths.get(System.getProperty("user.home") + "/Desktop/saves/characters/", player.getUsername() + ".json");
    However when I change too this, it works:

    Code:
    	private Player player;
    	
    	public Giveaway(Player player) {
    		this.player = player;
    	}
    	
    	
    	public void giveReward() {
    		 Path path = Paths.get(System.getProperty("user.home") + "/Desktop/saves/characters/", player.getUsername() + ".json");
    		 File file = path.toFile();
    		if (!file.exists()) {
    			System.out.println("File doesn't exist");
    			return;
    		}
    		try (FileReader fileReader = new FileReader(file)) {
    			JsonParser fileParser = new JsonParser();
    			Gson builder = new GsonBuilder().create();
    			JsonObject reader = (JsonObject) fileParser.parse(fileReader);
    			
    			if (reader.has("giveaway-rewards")) {
    				List<Item> list = new ArrayList<Item>();
    				Item[] rewards = builder.fromJson(reader.get("giveaway-rewards").getAsJsonArray(),
    						Item[].class);
    				for (Item s : rewards)
    					list.add(s);
    				player.setGiveawayRewards(list);
    				while(!list.isEmpty()) {
    					for(int i = 0; i < list.size(); i++) {
    						Item item = (Item) list.get(i);
    						player.giveItem(item.getId(), item.getAmount());
    						player.sendMessage("@sup@ Congratulations on winning the giveaway, you have received: x" + item.getAmount() + " " + ItemDefinition.forId(item.getId()).getName() + "!");
    						player.removeGiveawayReward(item);
    					}
    				}
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    Can anyone explain why moving
    Path path = Paths.get(System.getProperty("user.home") + "/Desktop/saves/characters/", player.getUsername() + ".json");
    File file = path.toFile();
    inside the method fixed the error?
    Reply With Quote  
     

  2. #2  
    Registered Member
    Join Date
    Jan 2019
    Posts
    26
    Thanks given
    4
    Thanks received
    16
    Rep Power
    29
    Only can think of when you're creating the class Giveaway like (based on your class):

    Code:
    Giveaway giveaway = new Giveaway(player);
    giveaway.giveReward();
    Shouldn't work because you haven't updated the path and player is considered null in the beginning. If you were to do this for example:

    Code:
    public Giveaway(Player player) {
    		this.player = player;
    		path = Paths.get(System.getProperty("user.home") + "/Desktop/saves/characters/", player.getUsername() + ".json");
                    file = path.toFile();
    	}
    It would work because you've set player to a new value that is not null before initializing path & file variables.
    Reply With Quote  
     


Thread Information
Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)


User Tag List

Similar Threads

  1. Replies: 2
    Last Post: 02-01-2017, 07:01 PM
  2. Looking for players + Mods to help me test
    By bruddakhan in forum Projects
    Replies: 2
    Last Post: 12-06-2014, 05:26 PM
  3. Replies: 5
    Last Post: 11-20-2012, 12:04 AM
  4. 2 Worlds loading same char file!! HElp
    By Mr House in forum Help
    Replies: 14
    Last Post: 01-24-2012, 04:31 PM
  5. Update-safe player save files
    By `Max in forum Help
    Replies: 3
    Last Post: 12-24-2011, 01:53 PM
Posting Permissions
  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •