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.