2015-09-23 3 views
0

Я создал простой словарь с использованием JavaFX. Я использовал базу данных SQLite и некоторые фотографии в своем приложении. Я экспортировал приложение в виде исполняемого JAR-файла, используя e (fx) Eclipse. Я выполнил описанные здесь шаги - https://wiki.eclipse.org/Efxclipse/Tutorials/Tutorial1.JavaFx runnable JAR export не работает

После экспорта я открыл файл .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)); 
    } 

} 
+0

Вы можете добавить код, который вы используете для загрузки изображений? – ItachiUchiha

+0

Я обновил сообщение, добавляя код. Пожалуйста, проверьте его сейчас. –

+0

Я угадываю, что эти изображения присутствуют в вашей банке, и если я правильно догадываюсь, вы не можете использовать «Файл» для загрузки изображений, которые присутствуют в вашей банке. Для загрузки их нужно использовать загрузчик классов. – ItachiUchiha

ответ

2

Есть несколько проблем здесь.

  1. Вы пытаетесь создать файл базы данных внутри своего проекта. Это не сработает, если вы упаковали свой проект как jar. Вы должны дать ему url вне вашего проекта. Файлы базы данных должны размещаться всегда вне проекта, так что, когда вы упаковываете свой проект в банку, они все равно могут быть созданы, прочитаны и записаны.

  2. Если изображения присутствуют внутри вашей банки, вы не можете использовать io.File для загрузки изображений. Вместо этого вы должны использовать class loader.

Код

URL url = getClass().getResource("/imran/bnacademy/meaning/" + text); 
Image image = new Image(url.toExternalForm()); 
Смежные вопросы