0

Tried running code several time but it wont run... Main class is:

package HelloSceneBuilder.src.Application;

import java.io.IOException;

import javafx.application.Application;
import javafx.application.Platform;
import javafx.event.EventHandler;
import javafx.fxml.FXMLLoader;
import javafx.stage.Stage;
import javafx.stage.WindowEvent;
import javafx.scene.Parent;
import javafx.scene.Scene;

public class Main extends Application {

    @Override
    public void start(Stage stage) throws IOException {
       
        FXMLLoader loader = new FXMLLoader(Main.class.getClassLoader().getResource("E:/VS CODE/JAVA/HelloSceneBuilder/src/Application/Scene.fxml"));
        //Parent root = FXMLLoader.load(getClass().getClassLoader().getResource("E:/VS CODE/JAVA/HelloSceneBuilder/src/Application/Scene.fxml"));
        Parent root =  loader.load();
        //URL url = new FXMLLoader("E:/VS CODE/JAVA/HelloSceneBuilder/src/Application/Scene.fxml").toURI().toURL();
        //Parent root = FXMLLoader.load(url);
        Scene scene = new Scene(root);
        stage.setScene(scene);
        stage.show();
        
        stage.setOnCloseRequest(new EventHandler<WindowEvent>() {

            @Override
            public void handle(WindowEvent arg0) {
                
                Platform.exit();
                System.exit(0); 
            }       

        });

    }   

    public static void main(String[] args) {

        launch(args);

    }
}

My controller class is:

package HelloSceneBuilder.src.Application;

import java.io.File;
import java.net.URL;
import java.util.ArrayList;
import java.util.ResourceBundle;
import java.util.Timer;
import java.util.TimerTask;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Label;
import javafx.scene.control.ProgressBar;
import javafx.scene.control.Slider;
import javafx.scene.layout.Pane;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javafx.util.Duration;

public class Controller implements Initializable{

    @FXML
    private Pane pane;
    @FXML
    private Label songLabel;
    @FXML
    private Button playButton, pauseButton, resetButton, previousButton, nextButton;
    @FXML
    private ComboBox<String> speedBox;
    @FXML
    private Slider volumeSlider;
    @FXML
    private ProgressBar songProgressBar;

    private Media media;
    private MediaPlayer mediaPlayer;

    private File directory;
    private File[] files;

    private ArrayList<File> songs;

    private int songNumber;

    private int[] speeds = {25, 50, 75, 100, 125, 150, 175, 200};

    private Timer timer;

    private TimerTask task;

    private boolean running;

    @Override
    public void initialize(URL arg0, ResourceBundle arg1) {

        songs = new ArrayList<File>();

        directory = new File("music");

        files = directory.listFiles();

        if(files != null) {

            for(File file : files) {

                songs.add(file);
            }

        }

        media = new Media(songs.get(songNumber).toURI().toString());
        mediaPlayer = new MediaPlayer(media);

        songLabel.setText(songs.get(songNumber).getName());

        for(int i = 0; i < speeds.length; i++) {

            speedBox.getItems().add(Integer.toString(speeds[i])+"%");

        }

        speedBox.setOnAction(this::changeSpeed);

        volumeSlider.valueProperty().addListener(new ChangeListener<Number>() {



            @Override

            public void changed(ObservableValue<? extends Number> arg0, Number arg1, Number arg2) {

                

                mediaPlayer.setVolume(volumeSlider.getValue() * 0.01);          

            }

        });

        

        songProgressBar.setStyle("-fx-accent: #00FF00;");

    }



    public void playMedia() {

        

        beginTimer();

        changeSpeed(null);

        mediaPlayer.setVolume(volumeSlider.getValue() * 0.01);

        mediaPlayer.play();

    }

    

    public void pauseMedia() {

        

        cancelTimer();

        mediaPlayer.pause();

    }

    

    public void resetMedia() {

        

        songProgressBar.setProgress(0);

        mediaPlayer.seek(Duration.seconds(0));

    }

    

    public void previousMedia() {

        

        if(songNumber > 0) {

            

            songNumber--;

            

            mediaPlayer.stop();

            

            if(running) {

                

                cancelTimer();

            }

            

            media = new Media(songs.get(songNumber).toURI().toString());

            mediaPlayer = new MediaPlayer(media);

            

            songLabel.setText(songs.get(songNumber).getName());

            

            playMedia();

        }

        else {

            

            songNumber = songs.size() - 1;

            

            mediaPlayer.stop();

            

            if(running) {

                

                cancelTimer();

            }

            

            media = new Media(songs.get(songNumber).toURI().toString());

            mediaPlayer = new MediaPlayer(media);

            

            songLabel.setText(songs.get(songNumber).getName());

            

            playMedia();

        }

    }

    

    public void nextMedia() {

        

        if(songNumber < songs.size() - 1) {

            

            songNumber++;

            

            mediaPlayer.stop();

            

            if(running) {

                

                cancelTimer();

            }

            

            media = new Media(songs.get(songNumber).toURI().toString());

            mediaPlayer = new MediaPlayer(media);

            

            songLabel.setText(songs.get(songNumber).getName());

            

            playMedia();

        }

        else {

            

            songNumber = 0;

            

            mediaPlayer.stop();

            

            media = new Media(songs.get(songNumber).toURI().toString());

            mediaPlayer = new MediaPlayer(media);

            

            songLabel.setText(songs.get(songNumber).getName());

            

            playMedia();

        }

    }

    

    public void changeSpeed(ActionEvent event) {

        

        if(speedBox.getValue() == null) {

            

            mediaPlayer.setRate(1);

        }

        else {

            

            //mediaPlayer.setRate(Integer.parseInt(speedBox.getValue()) * 0.01);

            mediaPlayer.setRate(Integer.parseInt(speedBox.getValue().substring(0, speedBox.getValue().length() - 1)) * 0.01);

        }

    }

    

    public void beginTimer() {

        

        timer = new Timer();

        

        task = new TimerTask() {

            

            public void run() {

                

                running = true;

                double current = mediaPlayer.getCurrentTime().toSeconds();

                double end = media.getDuration().toSeconds();

                songProgressBar.setProgress(current/end);

                

                if(current/end == 1) {

                    

                    cancelTimer();

                }

            }

        };

        

        timer.scheduleAtFixedRate(task, 0, 1000);

    }

    

    public void cancelTimer() {

        

        running = false;

        timer.cancel();

    }

}

my fxml file is:

<?xml version="1.0" encoding="UTF-8"?>



<?import javafx.scene.control.Button?>

<?import javafx.scene.control.ComboBox?>

<?import javafx.scene.control.Label?>

<?import javafx.scene.control.ProgressBar?>

<?import javafx.scene.control.Slider?>

<?import javafx.scene.layout.AnchorPane?>

<?import javafx.scene.text.Font?>



<AnchorPane fx:id="pane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="165.0" prefWidth="654.0" style="-fx-background-color: #222222;" xmlns="http://javafx.com/javafx/15.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.Controller">

   <children>

      <Label fx:id="songLabel" alignment="CENTER" layoutX="-1.0" prefHeight="100.0" prefWidth="655.0" text="MP3 Player" textFill="#00ff1a">

         <font>

            <Font size="65.0" />

         </font>

      </Label>

      <ProgressBar fx:id="songProgressBar" layoutX="-1.0" layoutY="99.0" prefHeight="18.0" prefWidth="655.0" progress="0.0" />

      <Button fx:id="playButton" layoutY="117.0" mnemonicParsing="false" onAction="#playMedia" prefHeight="46.0" prefWidth="85.0" text="PLAY">

         <font>

            <Font size="18.0" />

         </font>

      </Button>

      <Button fx:id="pauseButton" layoutX="85.0" layoutY="117.0" mnemonicParsing="false" onAction="#pauseMedia" prefHeight="46.0" prefWidth="85.0" text="PAUSE">

         <font>

            <Font size="18.0" />

         </font>

      </Button>

      <Button fx:id="resetButton" layoutX="170.0" layoutY="117.0" mnemonicParsing="false" onAction="#resetMedia" prefHeight="46.0" prefWidth="85.0" text="RESET">

         <font>

            <Font size="18.0" />

         </font>

      </Button>

      <Button fx:id="previousButton" layoutX="255.0" layoutY="117.0" mnemonicParsing="false" onAction="#previousMedia" prefHeight="46.0" prefWidth="85.0" text="PREVIOUS">

         <font>

            <Font size="13.0" />

         </font>

      </Button>

      <Button fx:id="nextButton" layoutX="340.0" layoutY="117.0" mnemonicParsing="false" onAction="#nextMedia" prefHeight="46.0" prefWidth="85.0" text="NEXT">

         <font>

            <Font size="13.0" />

         </font>

      </Button>

      <ComboBox fx:id="speedBox" layoutX="425.0" layoutY="117.0" onAction="#changeSpeed" prefHeight="46.0" prefWidth="79.0" promptText="SPEED" />

      <Slider fx:id="volumeSlider" layoutX="504.0" layoutY="133.0" max="100.0" prefHeight="14.0" prefWidth="149.0" value="50.0" />

   </children>

</AnchorPane>

package application;

The error i am receiving:

Exception in Application start method
java.lang.reflect.InvocationTargetException
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:566)
        at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:465)
        at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:364)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:566)
        at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1051)
Caused by: java.lang.RuntimeException: Exception in Application start method
        at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:901)
        at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:196)
        at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: java.lang.IllegalStateException: Location is not set.
        at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2541)
        at javafx.fxml/javafx.fxml.FXMLLoader.load(FXMLLoader.java:2516)
        at HelloSceneBuilder.src.Application.Main.start(Main.java:21)
        at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:847)
        at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:484)
        at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:457)
        at java.base/java.security.AccessController.doPrivileged(Native Method)
        at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:456)
        at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
        at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
        at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:184)
        ... 1 more
Exception running application HelloSceneBuilder.src.Application.Main

I tried many soln but didn't work... I also tried changing path of FXML file but no success... I tried to run a simple helloworld program for javafx and it was working, but i am getting many errors while running this... Also i am new to JAVAFX and this is my second project in it... and I use VS CODE... Thanks in advance...

Ankush
  • 1
  • [mcve] please .. mind the __M__! Anyway: the exception tells you what's wrong - please learn how to lookup resources, by studying the api doc of the method, the duplicate and/or relevant tutorials. – kleopatra Dec 13 '21 at 14:17

0 Answers0