JavaFx runnable JAR导出无法正常工作

时间:2015-09-23 20:39:16

标签: java eclipse jar javafx javafx-8

我使用JavaFX创建了一个简单的字典。我在我的应用程序中使用了SQLite数据库和一些图片。我使用e(fx)Eclipse将应用程序导出为可运行的JAR文件。我按照此处描述的步骤进行了操作 - https://wiki.eclipse.org/Efxclipse/Tutorials/Tutorial1

导出后,我打开了.JAR文件。它成功打开但工作不正常。它没有显示数据库和图像的结果。

在构建&之前将应用程序运行到Eclipse工作区时出口,它运作良好。

问题出在哪里?我该如何解决?

以下是控制器类功能的代码:

package imran.jfx.application;

import java.io.File;
import java.net.URL;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ResourceBundle;

import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Label;
import javafx.scene.control.ScrollPane;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.text.Text;

public class Application_Controler implements Initializable{

    @FXML
    private HBox hBox;

    @FXML
    private Label searchLabel;

    @FXML
    private TextField searchWord;

    @FXML
    private VBox vBox;

    @FXML
    private Text BanglaMeaning;

    @FXML
    private TextArea bnMeaningTxt;

    @FXML
    private Text bAcaMeaning;

    @FXML
    private ScrollPane bAcaMeaningImg;

    @FXML
    private Label footerLabel;

    ResultSet result;
    PreparedStatement doQuery;
    Connection conn;
    String query;

    @Override
    public void initialize(URL location, ResourceBundle resources) {
        try 
        {
            Class.forName("org.sqlite.JDBC");
        } 
        catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        String url="jdbc:sqlite:src/imran/ankurdb/meaning/bn_words.db";
        try 
        {
            conn = DriverManager.getConnection(url);
        } 
        catch (SQLException e) {
            e.printStackTrace();
        }
    }

    @FXML
    void showMeaning(ActionEvent event) throws Exception {
        bnMeaningTxt.clear();

        String text=searchWord.getText();

        query = "select en_word,bn_word from words where en_word='"+text+"'";

        doQuery = conn.prepareStatement(query);
        result = doQuery.executeQuery();

        int i=0;
        while (result.next()) 
        {
            if(i==0)
            {
                bnMeaningTxt.appendText(result.getString(1) + "\t\t" + result.getString(2));
                i++;
            }
            else
                bnMeaningTxt.appendText(" , "+result.getString(2));
        }

        File file = new File("src/imran/bnacademy/meaning/"+text);
        Image image = new Image(file.toURI().toString());
        bAcaMeaningImg.setContent(new ImageView(image));
    }

}

1 个答案:

答案 0 :(得分:2)

这里有很多问题。

  1. 您正在尝试在项目中创建数据库文件。将项目打包为 jar 时,这不起作用。您应该在项目之外给它url。数据库文件应始终放在项目之外,这样当您将项目打包为jar时,仍然可以创建,读取和写入它们。

  2. 如果图像存在于jar中,则无法使用io.File加载图像。您需要使用class loader来加载它们。

  3. <强>代码

    URL url = getClass().getResource("/imran/bnacademy/meaning/" + text);
    Image image = new Image(url.toExternalForm());