Problem med opdatering af billede i world of zuul
Jeg har et problem med billede skift i spillet world of zuul.Jeg har indsat følgende kode svarende til et billedeskift i GameGUI:
public void showImage(String imageName)
{
URL imageURL = this.getClass().getClassLoader().getResource(imageName);
if(imageURL == null)
System.out.println("image not found");
else {
ImageIcon icon = new ImageIcon(imageURL);
image.setIcon(icon);
}
}
i Room classen har jeg følgende, som jeg vil mene skal være for at kunne skifte billede, når man går ind i et andet rum.
private String imageName;
public Room(String description, String image)
{
this.description = description;
imageName = image;
}
public String getImageName()
{
return imageName;
}
og i Game classen ahr jeg følgende kode der tager hensyn til hvilken retning man vælger at gå:
private void goRoom(Command command)
{
if(!command.hasSecondWord()) {
// if there is no second word, we don't know where to go...
System.out.println("Go where?");
return;
}
String direction = command.getSecondWord();
// Try to leave current room.
Room nextRoom = null;
if(direction.equals("north")) {
nextRoom = currentRoom.northExit;
}
if(direction.equals("east")) {
nextRoom = currentRoom.eastExit;
}
if(direction.equals("south")) {
nextRoom = currentRoom.southExit;
}
if(direction.equals("west")) {
nextRoom = currentRoom.westExit;
}
if (nextRoom == null) {
System.out.println("There is no door!");
}
else {
currentRoom = nextRoom;
System.out.println(currentRoom.getLongDescription());
gui.showImage(currentRoom.getImageName());
}
}
------ Noget kode er udeladt..
Jeg har følgende problem. Jeg kan som sagt ikke få opdateret bilelderne når jeg går ind i et andet rum.
Hvis jeg kommatere følgende sætning viser den ingen fejl:
gui.showImage(currentRoom.getImageName());
, men hvis denne ikke er kommenteret, og egenlig burde vise et nyt billede for det rum det svarer til får jeg følgende fejl i terminal vinduet..
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at Game.goRoom(Game.java:121)
at Game.play(Game.java:86)
at GameGUI.actionPerformed(GameGUI.java:182)
at javax.swing.JTextField.fireActionPerformed(JTextField.java:487)
at javax.swing.JTextField.postActionEvent(JTextField.java:668)
at javax.swing.JTextField$NotifyAction.actionPerformed(JTextField.java:783)
at javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1571)
at javax.swing.JComponent.processKeyBinding(JComponent.java:2763)
at javax.swing.JComponent.processKeyBindings(JComponent.java:2798)
at javax.swing.JComponent.processKeyEvent(JComponent.java:2726)
at java.awt.Component.processEvent(Component.java:5265)
at java.awt.Container.processEvent(Container.java:1966)
at java.awt.Component.dispatchEventImpl(Component.java:3955)
at java.awt.Container.dispatchEventImpl(Container.java:2024)
at java.awt.Component.dispatchEvent(Component.java:3803)
at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1810)
at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:672)
at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:920)
at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:798)
at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:636)
at java.awt.Component.dispatchEventImpl(Component.java:3841)
at java.awt.Container.dispatchEventImpl(Container.java:2024)
at java.awt.Window.dispatchEventImpl(Window.java:1774)
at java.awt.Component.dispatchEvent(Component.java:3803)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
