有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java引用MediaPlayer中断脚本?NullPointerException(JavaFX)

Exception in thread "JavaFX Application Thread" java.lang.NullPointerException
    at game.updateLocation(game.java:52)
    at worldMap.startGame(worldMap.java:72)
    at gameRun.lambda$start$0(gameRun.java:63)
    at gameRun$$Lambda$1/424873723.handle(Unknown Source)
    at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
    at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
    at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49)
    at javafx.event.Event.fireEvent(Event.java:204)
    at javafx.scene.Node.fireEvent(Node.java:8175)
    at javafx.scene.control.Button.fire(Button.java:185)
    at com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:182)
    at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:96)
    at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:89)
    at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218)
    at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
    at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
    at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
    at javafx.event.Event.fireEvent(Event.java:204)
    at javafx.scene.Scene$MouseHandler.process(Scene.java:3746)
    at javafx.scene.Scene$MouseHandler.access$1800(Scene.java:3471)
    at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1695)
    at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2486)
    at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:314)
    at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:243)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:345)
    at com.sun.glass.ui.View.handleMouseEvent(View.java:526)
    at com.sun.glass.ui.View.notifyMouse(View.java:898)
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at com.sun.glass.ui.win.WinApplication.access$300(WinApplication.java:39)
    at com.sun.glass.ui.win.WinApplication$4$1.run(WinApplication.java:112)
    at java.lang.Thread.run(Thread.java:745)

以下代码的触发器来自gameRun.java

worldMap map = new worldMap();
map.startGame(game);

是我尝试单击播放按钮时出现的错误。worldMap中的代码片段。java如下所示

Location YourHometown, Beach;
Location newLocation;
public void createLocations()
{
    YourHometown = new Location("Your Hometown", "Everyone smiles here and talks about sunshines and rainbows. It has a familiar scent of roasted pigs and handknit socks.", "YourHometown.mp3", "Town");
    newLocation = YourHometown;
    Beach = new Location("Beach", "It's Beachy", "Beach.mp3", "Zone");
}

public void startGame(game Game)
{
    createLocations();
    Game.updateLocation(newLocation);
}

Game.updateLocation()game.java

public void updateLocation (Location newLocation){
...
}

Location是它自己的独立类,是一个对象。理想情况下,这段代码应该做的是每次按下一个与当前按钮位置不同的按钮时更改newLocation。显示代码的目的是将默认的Location设置为YourHometown{}对象

然而,一旦我们运行Game.updateLocation(newLocation);并出现以下错误,代码就会中断,尽管我知道NullPointerException是什么,但我不知道如何在给定的JavaFX上下文中修复它

我的推理是为了让代码运行,代码被用startGame()方法强制进入createLocations();,因此newLocation为空(因为newLocations被设置为等于YourHometown)。为了测试我的逻辑,我在startGame()下运行了以下代码,它仍然返回相同的错误:

public void startGame(game Game)
{
    createLocations();
    if(newLocation != null)
    {
        Game.updateLocation(newLocation);
    }
    else
    {
        System.out.println("Break");
    }
}

控制台没有打印“Break”行,这意味着newLocation确实不是null,但是updateLocation()的脚本运行并返回错误

TL;DR结论

public void updateLocation (Location newLocation){
    if(bgm.getStatus().equals(Status.PLAYING))
    {
        timeline = new Timeline(new KeyFrame(Duration.seconds(2), new KeyValue(bgm.volumeProperty(), 0)));
        timeline.play();
        bgm.stop();
    }

    bg = new Media(new File(newLocation.getMusic()).toURI().toString());
    bgm = new MediaPlayer(bg);
    bgm.play();

    timeline = new Timeline(new KeyFrame(Duration.seconds(2), new KeyValue(bgm.volumeProperty(), 1)));
    timeline.play();
}

除了上面给出的方法之外,所有的东西都在工作。我认为这可能是某种文件/媒体播放器问题,但我不知道如何解决它。updateLocation()的功能应该是从上一个位置的音乐平滑过渡到下一个位置(上一个音乐淡出-->;下一个位置音乐淡入)。它称之为。与脚本位于同一文件夹中的mp3文件

任何帮助都是感激的,我可以包括任何额外的信息,如果它丢失。我试着简化它,使它不那么容易阅读


共 (1) 个答案

  1. # 1 楼答案

    当你打电话的时候

    map.startGame(game);
    

    游戏无效。我看不出你是否从粘贴的代码中为它赋值