0

I'm trying to use fileChooser to change my media player file. During Runtime when I try to open, I get Exception in thread "JavaFX Application Thread" java.lang.NullPointerException. The main.java file is as follows:

package application;

import java.io.*;
import java.net.MalformedURLException;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Menu;
import javafx.scene.control.MenuBar;
import javafx.scene.control.MenuItem;
import javafx.scene.paint.Color;
import javafx.stage.FileChooser;
import javafx.stage.Stage;


public class Main extends Application {

    Player player;
    FileChooser fileChooser;

    public void start(final Stage primaryStage) {

        MenuItem open = new MenuItem("Open");
        Menu file = new Menu("File");
        MenuBar menu = new MenuBar();

        file.getItems().add(open);
        menu.getMenus().add(file);

        fileChooser = new FileChooser();

        open.setOnAction(new EventHandler<ActionEvent>() {
            public void handle(ActionEvent e) {

                player.player.pause();

                File file = fileChooser.showOpenDialog(primaryStage);
                if(file != null) {
                    try {

                        player = new Player(file.toURI().toURL().toExternalForm());
                        Scene scene = new Scene(player,720,580,Color.BLACK);
                        primaryStage.setScene(scene);
                    } catch (MalformedURLException e1) {

                        e1.printStackTrace();
                    }
                }
            }
        });


        //Creating file object for media source
        File files =new File("D:/music.mp3");
        // Change URI to string format in file
        final String source=files.toURI().toString();
        Player player = new Player(source);
        player.setTop(menu);
            Scene scene = new Scene(player,720,580);

                primaryStage.setScene(scene);

                primaryStage.setTitle("KoroPlay");

                primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

The error which is showing is:

Exception in thread "JavaFX Application Thread" java.lang.NullPointerException at application.Main$1.handle(Main.java:37) at application.Main$1.handle(Main.java:1) 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.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58) 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:198) at javafx.scene.control.MenuItem.fire(MenuItem.java:462) at com.sun.javafx.scene.control.skin.ContextMenuContent$MenuItemContainer.doSelect(ContextMenuContent.java:1405) at com.sun.javafx.scene.control.skin.ContextMenuContent$MenuItemContainer.lambda$createChildren$343(ContextMenuContent.java:1358) 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.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:198) at javafx.scene.Scene$MouseHandler.process(Scene.java:3757) at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3485) at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1762) at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2494) at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:380) at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:294) at java.security.AccessController.doPrivileged(Native Method) at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$354(GlassViewEventHandler.java:416) at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389) at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:415) at com.sun.glass.ui.View.handleMouseEvent(View.java:555) at com.sun.glass.ui.View.notifyMouse(View.java:937) at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191) at java.lang.Thread.run(Unknown Source)

The Main:Java:37 is
player.player.pause(); The player class is created in another file. This is Player.java if required:

package application;


import javafx.scene.layout.BorderPane;
import javafx.scene.layout.Pane;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javafx.scene.media.MediaView;

public class Player extends BorderPane {

    Media media;
    MediaPlayer player;
    MediaView view;
    Pane pane ;
    MediaPanel panel;
    public  Player(String file) {
        media= new Media(file);
        player = new MediaPlayer(media);

        view = new MediaView(player);
    // Setting mediaView dimension w.r.t the media(video)
        view.setTranslateX(view.getFitWidth()  / 2 + 50); 
        view.setTranslateY(view.getFitHeight() / 2 - 13);
        view.setScaleX(0.90); view.setScaleY(0.95);
        //Setting pane location
        pane=new Pane();
        pane.getChildren().add(view);

            setCenter(pane);


        panel=new MediaPanel(player);
        setStyle("-fx-background-color:BLACK");
        setBottom(panel);
        panel.setStyle("-fx-background-color:#ffffff");
        player.play();
    }

    //public MediaPlayer(Media media2) {
        // TODO Auto-generated constructor stub
//  }

}

How can I resolve this issue? The media which is set by default doesn't stop as requested and While requesting to open a new file. This error is happening.

Tirtha
  • 11
  • 3
  • What is `MediaPanel` ? – dumbPotato21 Mar 19 '17 at 15:01
  • 1
    Media-Panel is a class that describes the media control components like play,pause, volume etc. It has defined all the onClick activities of those components. But I don't think that object has any relevance to this issue. – Tirtha Mar 19 '17 at 15:10
  • You appear to be shadowing the Player variable, leaving it null. Don't do this. – Hovercraft Full Of Eels Mar 19 '17 at 15:14
  • 1
    e.g., here: `Player player = new Player(source);`, change it to `player = new Player(source);`. Note the key difference -- you don't want to re-declaring the player field in a local scope. – Hovercraft Full Of Eels Mar 19 '17 at 15:15
  • _Hovercraft Full Of Eels_ ,yes, that fixed the error. But now when I open the new file, the Menubar disappears. So I can't change the file again without relaunching the application. – Tirtha Mar 19 '17 at 15:22

0 Answers0