2016-10-24 13 views
1

Ich habe eine Anwendung in Java mit JavaFx und Hibernate erstellt. in meiner IDE funktioniert alles richtig. Aber wenn ich die Anwendung erstelle und die .jar-Datei starte, funktionieren alle Funktionen, die Hibernate verwenden, nicht.Build mit Hibernate funktioniert nicht (nur Hibernate)

ich erstellen Sie einen anderen testapp Sie meinen Code zu erhalten:

hier ist meine Hauptklasse:

package testapp; 

import java.util.List; 
import javafx.application.Application; 
import javafx.collections.FXCollections; 
import javafx.collections.ObservableList; 
import javafx.scene.Scene; 
import javafx.scene.control.ComboBox; 
import javafx.scene.layout.StackPane; 
import javafx.stage.Stage; 
import org.hibernate.Query; 
import org.hibernate.Session; 
import org.hibernate.SessionFactory; 

public class Testapp extends Application { 

    @Override 
    public void start(Stage primaryStage) { 

     ComboBox<Test> cmbtest=new ComboBox<>(); 
     ObservableList<Test> l=FXCollections.observableArrayList(loadCmb());  
     StackPane root = new StackPane();  
     root.getChildren().add(cmbtest); 
     cmbtest.setItems(l); 
     Scene scene = new Scene(root, 300, 250);   
     primaryStage.setTitle("Hello World!"); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 

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

    public List<Test> loadCmb(){ 
     List<Test> list; 
     SessionFactory sf; 
     sf= NewHibernateUtil.getSessionFactory();  
     Session session = sf.openSession(); 
     Query query=session.createQuery("FROM Test test");   
     list=query.list(); 
     return list; 
     } 

} 
<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 
<hibernate-configuration> 
    <session-factory> 
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> 
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> 
    <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test?zeroDateTimeBehavior=convertToNull</property> 
    <property name="hibernate.connection.username">root</property> 
    <property name="hibernate.connection.password">****</property> 
    <mapping resource="testapp/Test.hbm.xml"/> 
    </session-factory> 
</hibernate-configuration> 

das ist mein NewHibernateUtil:

package testapp; 

import java.io.File; 
import javax.imageio.spi.ServiceRegistry; 
import org.hibernate.SessionFactory; 
import org.hibernate.boot.registry.StandardServiceRegistry; 
import org.hibernate.boot.registry.StandardServiceRegistryBuilder; 
import org.hibernate.cfg.Configuration; 

public class NewHibernateUtil { 

    private static SessionFactory sf; 
    private static ServiceRegistry serviceRegistrry;  

    static { 
     try { 
      File file=new File("src/testapp/hibernate.cfg.xml"); 
      Configuration cfg= new Configuration().configure(file);    
      StandardServiceRegistryBuilder sb= new StandardServiceRegistryBuilder(); 
      sb.applySettings(cfg.getProperties()); 
      StandardServiceRegistry standardServiceRegistry= sb.build(); 
      sf = cfg.buildSessionFactory(standardServiceRegistry); 
     } catch (Throwable ex) {    
      System.err.println("Initial SessionFactory creation failed." + ex); 
      throw new ExceptionInInitializerError(ex); 
     } 
    } 

    public static SessionFactory getSessionFactory() { 
     return sf; 
    } 
} 

dies meine einzige ist Klasse, erstellt aus meiner Datenbank in MySql

package testapp; 
// Generated 24/10/2016 01:53:10 PM by Hibernate Tools 4.3.1 



/** 
* Test generated by hbm2java 
*/ 
public class Test implements java.io.Serializable { 


    private String name; 
    private Integer number; 

    public Test() { 
    } 


    public Test(String name) { 
     this.name = name; 
    } 
    public Test(String name, Integer number) { 
     this.name = name; 
     this.number = number; 
    } 

    public String getName() { 
     return this.name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 
    public Integer getNumber() { 
     return this.number; 
    } 

    public void setNumber(Integer number) { 
     this.number = number; 
    } 
} 

mySql ist eine Tabelle mit zwei Spalten testtable: Name und Nummer

wenn ich dieses Programm in meiner IDE laufen die Anwendung korrekt ausgeführt wird, aber wenn ich die Anwendung zu erstellen, die .jar-Datei ist nicht Arbeiten.

hier ist die Ausgabe von meinem Build:

ant -f C:\\Users\\Dani-Fla-Mathi\\Documents\\NetBeansProjects\\testapp jfx-rebuild 
init: 
deps-clean: 
Created dir: \testapp\build 
Updating property file: \testapp\build\built-clean.properties 
Deleting directory \testapp\build 
clean: 
init: 
deps-jar: 
Created dir: \testapp\build 
Updating property file: \testapp\build\built-jar.properties 
Created dir: \testapp\build\classes 
Created dir: \testapp\build\empty 
Created dir: \testapp\build\generated-sources\ap-source-output 
Compiling 3 source files to \testapp\build\classes 
Note:\testapp\src\testapp\Testapp.java uses unchecked or unsafe operations. 
Note: Recompile with -Xlint:unchecked for details. 
Copying 3 files to \testapp\build\classes 
compile: 
Created dir: \testapp\dist 
Copying 17 files to \testapp\dist\lib 
Detected JavaFX Ant API version 1.3 
Launching <fx:jar> task from C:\Program Files\Java\jdk1.8.0_05\jre\..\lib\ant-javafx.jar 
Warning: From JDK7u25 the Codebase manifest attribute should be used to restrict JAR repurposing. 
     Please set manifest.custom.codebase property to override the current default non-secure value '*'. 
Launching <fx:deploy> task from C:\Program Files\Java\jdk1.8.0_05\jre\..\lib\ant-javafx.jar 
jfx-deployment-script: 
jfx-deployment: 
jar: 
jfx-rebuild: 
BUILD SUCCESSFUL (total time: 2 seconds) 

lassen Sie es mich wissen, wenn Sie

+0

Entschuldige, build * mit * – Clams

+0

Wie kann jemand empfehlen, was Sie ohne Code, Fehlermeldungen fehlen? – DimaSan

+0

Um diese Frage beantworten zu können, sind wesentlich mehr Informationen erforderlich (ohne nur Vermutungen über die vielen Dinge anzustellen, die falsch sein könnten). Bitte lies http://stackoverflow.com/help/how-to-ask und versuche deine Frage entsprechend den dortigen Richtlinien zu gestalten. –

Antwort

0
weitere Informationen benötigen

Sie die Hibernate-Konfiguration aus einer Datei geladen wird, dessen Pfad angegeben in Bezug auf das aktuelle Arbeitsverzeichnis:

File file=new File("src/testapp/hibernate.cfg.xml"); 
Configuration cfg= new Configuration().configure(file); 

Klar, wenn Sie die Anwendung als ein jar f bereitstellen ie, dieser Dateipfad ist nicht mehr sinnvoll (abgesehen von allem anderen wird der Ordner src nicht in der JAR-Datei enthalten sein und zur Laufzeit nicht anderweitig verfügbar sein).

Sie stattdessen die Konfigurationsdatei als Ressource angeben sollte, die URL zu geben:

URL resource = NewHibernateUtil.class.getResource("hibernate.cfg.xml"); 
Configuration cfg= new Configuration().configure(resource);    

Unter der Annahme, alles andere richtig eingesetzt wird, dh die Konfigurationsdatei in die JAR-Datei bereitgestellt wird, sind die Hibernate-Gläser auf der Klassenpfad usw. sollte das Problem beheben.

+0

Danke. Das war der Fehler. Jetzt funktioniert es richtig. – Clams

+0

@DanielNacher Gern geschehen. Bitte markieren Sie die Antwort als richtig: Es hilft anderen, es zu finden, wenn sie ein ähnliches Problem haben. –

Verwandte Themen