Пишу проект на java c использованием javafx в intellij idea. Проблема состоит в том, что при запуске из ide программа читает/пишет в базу данных и все прекрасно, ошибок/предупреждений нет. Но скомпилированный .ехе отказывается работать.
В корне диска D находится файл DATA.db
Он открывается и редактируется через DB Browser (SQLite)
Таблица в базе данных не пустая. Но .ехе отказывается ее читать в методе updateListDatabase()
Буду благодарен за помощь/подсказку.
Мой класс:
package sample;
import javafx.application.Platform;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.Label;
import javafx.scene.control.ListView;
import javafx.stage.Stage;
import java.io.IOException;
import java.sql.*;
public class Controller {
public static Stage stage1, stage2;
public static String dbPath;
private boolean newDatabaseStatus = createDatabase.newDatabaseStatus;
private Statement statement;
private Connection connection;
@FXML
private ListView<String> listDB;
public void initialize() throws ClassNotFoundException, SQLException, IOException {
try {
Class.forName("org.sqlite.JDBC");
connection = DriverManager.getConnection("jdbc:sqlite:D:/DATA.db");
statement = connection.createStatement();
statement.execute("CREATE TABLE if not exists 'databaselist' ('id' INTEGER PRIMARY KEY AUTOINCREMENT, 'name' text, 'path' text);");
updateListDatabase();
System.out.println("Таблица выведена");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Thread myThread = new Thread(new Runnable() {
@Override
public void run() {
while (!Thread.currentThread().isInterrupted()) {
Platform.runLater(new Runnable() {
@Override public void run() {
newDatabaseStatus = createDatabase.newDatabaseStatus;
if(newDatabaseStatus == true){
createDatabase.newDatabaseStatus = false;
try {
updateListDatabase();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
});
try {
Thread.sleep(500);
} catch (InterruptedException e) {
return;
}
}
}
});
myThread.start();
}
@FXML
private void addDatabaseToList(){
try {
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("createDatabase.fxml"));
Parent root1 = fxmlLoader.load();
stage1 = new Stage();
stage1.setScene(new Scene(root1, 456, 150));
stage1.show();
} catch (Exception e) {
e.printStackTrace();
}
}
public void openDatabase() {
System.out.println(listDB.getSelectionModel().getSelectedItem());
String path = listDB.getSelectionModel().getSelectedItem().substring(listDB.getSelectionModel().getSelectedItem().indexOf('-') + 2);
dbPath = "jdbc:sqlite:" + path.replace('\\', '/');
System.out.println(dbPath);
try {
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("databaseView.fxml"));
Parent root1 = fxmlLoader.load();
stage2 = new Stage();
stage2.setTitle(listDB.getSelectionModel().getSelectedItem());
stage2.setScene(new Scene(root1, 1200, 800));
stage2.show();
} catch (Exception e) {
e.printStackTrace();
}
}
public void updateListDatabase() throws SQLException {
listDB.getItems().clear();
ResultSet resultSet = statement.executeQuery("SELECT * FROM databaselist");
while(resultSet.next())
{
int id = resultSet.getInt("id");
String name = resultSet.getString("name");
String path = resultSet.getString("path");
listDB.getItems().add(name + " - " + path.replace("jdbc:sqlite:", "").replace("/", "\\"));
}
}
}
Разметка:
<?xml version="1.0" encoding="UTF-8"?>
<?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?>
<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.Controller">
<children>
<ListView fx:id="listDB" layoutX="14.0" layoutY="14.0" prefHeight="200.0" prefWidth="200.0" AnchorPane.leftAnchor="10.0" AnchorPane.rightAnchor="10.0" AnchorPane.topAnchor="10.0" />
<Button layoutX="14.0" layoutY="230.0" mnemonicParsing="false" onAction="#addDatabaseToList" prefHeight="20.0" prefWidth="150.0" text="Новая база данных" AnchorPane.leftAnchor="10.0" AnchorPane.topAnchor="220.0" />
<Button onAction="#openDatabase" layoutX="10.0" layoutY="259.0" mnemonicParsing="false" prefHeight="20.0" prefWidth="150.0" text="Открыть" AnchorPane.topAnchor="260.0" />
<Button layoutX="10.0" layoutY="301.0" mnemonicParsing="false" prefHeight="20.0" prefWidth="150.0" text="SQL" AnchorPane.topAnchor="300.0" />
<Button layoutX="10.0" layoutY="339.0" mnemonicParsing="false" prefHeight="20.0" prefWidth="150.0" text="Формы" AnchorPane.topAnchor="340.0" />
</children>
</AnchorPane>