Search code examples
javaexceptionjavafxprogram-entry-pointfxml

Exception in thread "main" java.lang.ClassNotFoundException: sample.Main - why?


I'm getting this error on compile time and I have no idea why. The error log doesn't shed much light on it either. Already searched for other answers, they all pertain to frameworks that I'm not using or recommend to make sure the name of the file is the same as the name of the class(yup, both named "FolderSyncer4"). Code for reference:

FolderSyncer4.java

package sample;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.DirectoryChooser;
import javafx.stage.Stage;
import java.io.*;
import java.nio.file.Path;
import java.util.LinkedList;

public class FolderSyncer4 extends Application {

    final String FOLDER_SYNCER = "FolderSyncer";

    Stage theStage;

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


    @Override
    public void start(Stage primaryStage) throws Exception {
        theStage = primaryStage;

        //TODO do the FXML stuff, hope this works
        //Parent root = FXMLLoader.load(getClass().getResource("FolderSyncerMainWindow.fxml"));

        //Display the "Selecting" scene at first
        theStage.setTitle(FOLDER_SYNCER);
        theStage.show();
    }
}

FolderSyncerMainWindowController.java

package sample;

import javafx.scene.control.Button;
import javafx.scene.control.Label;

import java.io.IOException;

public class FolderSyncerMainWindowController {

    final String FOLDER_SYNCER = "FolderSyncer";
    final String BROWSE = "Browse";
    final String SOURCE = "Source...";
    final String TARGET = "Target...";
    final String COMPARE = "Compare";
    final String CANCEL = "Cancel";
    final String SYNCHRONIZE = "Synchronize";
    final String COMPARING = "Comparing, this may take several minutes.";
    final String SYNCHRONIZING = "Synchronizing, this may take several minutes.";
    final String DONE = "Done.";

    public Label sourceLabel = new Label(SOURCE);

}

FolderSyncerMainWindow.fxml

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

<?import javafx.scene.effect.*?>
<?import javafx.geometry.*?>
<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>

<BorderPane prefHeight="574.0" prefWidth="687.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"
fx:controller="sample.FolderSyncerMainWindowController">
   <padding>
      <Insets bottom="8.0" left="8.0" right="8.0" top="8.0" />
   </padding>
   <left>
      <HBox prefHeight="492.0" prefWidth="523.0" spacing="8.0" BorderPane.alignment="CENTER">
         <children>
            <TreeView prefHeight="509.0" prefWidth="321.0" HBox.hgrow="ALWAYS" />
            <TreeView prefHeight="509.0" prefWidth="324.0" HBox.hgrow="ALWAYS" />
         </children>
      </HBox>
   </left>
   <top>
      <VBox prefHeight="47.0" prefWidth="702.0" spacing="8.0" BorderPane.alignment="CENTER">
         <children>
            <HBox prefHeight="8.0" prefWidth="702.0" spacing="8.0">
               <children>
                  <Label fx:id="sourceLabel" prefHeight="17.0" prefWidth="44.0">
                     <HBox.margin>
                        <Insets />
                     </HBox.margin>
                  </Label>
                  <TextField editable="false" prefHeight="25.0" prefWidth="543.0" HBox.hgrow="ALWAYS" />
                  <Button mnemonicParsing="false" prefHeight="25.0" prefWidth="61.0" text="Browse" />
               </children>
               <VBox.margin>
                  <Insets />
               </VBox.margin>
            </HBox>
            <HBox prefHeight="45.0" prefWidth="702.0" spacing="8.0">
               <children>
                  <Label prefHeight="17.0" prefWidth="44.0" text="Target" />
                  <TextField editable="false" prefHeight="25.0" prefWidth="543.0" HBox.hgrow="ALWAYS" />
                  <Button mnemonicParsing="false" prefHeight="25.0" prefWidth="61.0" text="Browse" />
               </children>
            </HBox>
         </children>
         <BorderPane.margin>
            <Insets bottom="8.0" />
         </BorderPane.margin>
      </VBox>
   </top>
   <right>
      <GridPane prefHeight="492.0" prefWidth="140.0" BorderPane.alignment="CENTER">
        <columnConstraints>
          <ColumnConstraints halignment="CENTER" hgrow="SOMETIMES" minWidth="10.0" />
        </columnConstraints>
        <rowConstraints>
            <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
            <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
          <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
          <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
          <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
            <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
            <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
        </rowConstraints>
         <effect>
            <DropShadow />
         </effect>
         <BorderPane.margin>
            <Insets left="8.0" />
         </BorderPane.margin>
         <children>
            <Button fx:id="compareButton" mnemonicParsing="false" text="Compare" />
            <Button fx:id="synchronizeButton" mnemonicParsing="false"  text="Synchronize" GridPane.rowIndex="1" />
         </children>
      </GridPane>
   </right>
</BorderPane>

Error log:

Exception in thread "main" java.lang.ClassNotFoundException: sample.Main
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:264)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:122)

Process finished with exit code 1

Solution

  • java -jar xxx.jar sample.FolderSyncer4 should work. It seems you use sample.Main instead.