Ошибка при запуске проекта базы данных javafx - PullRequest
0 голосов
/ 26 марта 2020

Я пытался построить проект базы данных в JavaFX, используя конструктор сцен. Все отлично работало с проектированием, созданием файлов CSS и установкой библиотеки базы данных derby Но когда я запускаю программу, я получаю сообщение об ошибке:

> Exception in Application start method
> java.lang.reflect.InvocationTargetException   at
> sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)   at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>   at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>   at java.lang.reflect.Method.invoke(Method.java:498)     at
> com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:389)
>   at
> com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:328)
>   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>   at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>   at java.lang.reflect.Method.invoke(Method.java:498)     at
> sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767)
> Caused by: java.lang.RuntimeException: Exception in Application start
> method    at
> com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:917)
>   at
> com.sun.javafx.application.LauncherImpl.lambda$launchApplication$1(LauncherImpl.java:182)
>   at java.lang.Thread.run(Thread.java:748) Caused by:
> java.lang.UnsupportedClassVersionError:
> org/apache/derby/jdbc/EmbeddedDriver has been compiled by a more
> recent version of the Java Runtime (class file version 53.0), this
> version of the Java Runtime only recognizes class file versions up to
> 52.0  at java.lang.ClassLoader.defineClass1(Native Method)    at java.lang.ClassLoader.defineClass(ClassLoader.java:756)  at
> java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
>   at java.net.URLClassLoader.defineClass(URLClassLoader.java:468)     at
> java.net.URLClassLoader.access$100(URLClassLoader.java:74)    at
> java.net.URLClassLoader$1.run(URLClassLoader.java:369)    at
> java.net.URLClassLoader$1.run(URLClassLoader.java:363)    at
> java.security.AccessController.doPrivileged(Native Method)    at
> java.net.URLClassLoader.findClass(URLClassLoader.java:362)    at
> java.lang.ClassLoader.loadClass(ClassLoader.java:418)     at
> sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:355)     at
> java.lang.ClassLoader.loadClass(ClassLoader.java:351)     at
> java.lang.Class.forName0(Native Method)   at
> java.lang.Class.forName(Class.java:264)   at
> db.db.Createconnection(db.java:34)    at db.db.<init>(db.java:27)     at
> javafxapplication3.FXMLDocumentController.initialize(FXMLDocumentController.java:36)
>   at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2548)    at
> javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441)     at
> javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3214)     at
> javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3175)     at
> javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3148)     at
> javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3124)     at
> javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3104)     at
> javafx.fxml.FXMLLoader.load(FXMLLoader.java:3097)     at
> javafxapplication3.JavaFXApplication3.start(JavaFXApplication3.java:22)
>   at
> com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$8(LauncherImpl.java:863)
>   at
> com.sun.javafx.application.PlatformImpl.lambda$runAndWait$7(PlatformImpl.java:326)
>   at
> com.sun.javafx.application.PlatformImpl.lambda$null$5(PlatformImpl.java:295)
>   at java.security.AccessController.doPrivileged(Native Method)   at
> com.sun.javafx.application.PlatformImpl.lambda$runLater$6(PlatformImpl.java:294)
>   at
> com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
>   at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)  at
> com.sun.glass.ui.win.WinApplication.lambda$null$4(WinApplication.java:186)
>   ... 1 more Exception running application
> javafxapplication3.JavaFXApplication3 Java Result: 1

При поиске похожих проблем я обнаружил, что мне может не хватать чего-то, называемого VM option (хотя я не совсем уверен, что это)

Поэтому я добавил эту строку в свой вариант виртуальной машины из проекта netbeans:

- путь к модулю C: \ javafx-sdk-11.0.2 \ lib --add -модули javafx.controls, javafx.f xml

На этот раз я получил новую ошибку:

**

Ошибка: не удалось создать виртуальную машину Java. Ошибка: произошло фатальное исключение. Программа выйдет. Нераспознанная опция: --module-path Java Результат: 1

Теперь я понятия не имею, как от него избавиться.

У меня всего 4 файлы в моем простом проекте. Основная функция здесь:

@Override
public void start(Stage stage) throws Exception {
    Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml"));

    Scene scene = new Scene(root);

    stage.setScene(scene);
    stage.show();
}

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
    launch(args);
}

Это контроллер документов XML:

@FXML
private Label label;
@FXML
private Button button;

private void handleButtonAction(ActionEvent event) {
    System.out.println("You clicked me!");
    label.setText("Hello World!");
}

@Override
public void initialize(URL url, ResourceBundle rb) {
    // TODO
     db dbh = new db();
}    

@FXML
private void pri(ActionEvent event) {
    System.out.print("hi");
}

Это код для создания соединения с базой данных:

public db()
{
    Createconnection();
    setupbooktable();
}
void Createconnection()
{
    try
    {
        Class.forName("org.apache.derby.jdbc.EmbeddedDriver").newInstance();
        conn=DriverManager.getConnection(db_url);

    }
    catch(Exception e)
            {
                e.printStackTrace();
            }
}

void setupbooktable()
{

    String tablename="Book";
    try
    {
        stam=conn.createStatement();
        DatabaseMetaData dmd=conn.getMetaData();
        ResultSet tables=dmd.getTables(null, null, tablename.toUpperCase(), null);
        if(tables.next())
        {
            System.out.println("Table"+tablename+"exists already!Ready to go!!");

        }
        else
        {
            stam.execute("CREATE TABLE"+tablename+"("
                    + "id varchar(200) primary key ,\n"
                    + "title varchar(200),\n"
                    + "author varchar(200),\n"
                    + "publisher varchar(200),\n"
                    + "intcode varchar(200),\n"
                    + "isavailable boolean default true"
                    +")");



        }




    }
    catch(SQLException e)
    {
        System.err.printf(e.getMessage()+"error in database...");

    }
    finally
    {

    }

}


I have no issues in importing packages. This project just prints a message on the prompt when the button is pressed. And try to create a database table.

Спасибо.

...