2017-08-13 4 views
0

私はproguardで正常に動作していたjavafxアプリケーションを持っています。javafxアプリケーションを保護するための専門家

しかし、私のアプリケーションにxerial-sqliteのを追加した後、ProGuardのはまだのjava -jar program.jarのコマンドを使用して実行している間、私は次のようなエラーが発生したが正常に動作します:sqliteのの

18:31:42,161 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [dailyRollingFileAppender] to Logger[ROOT] 
18:31:42,161 |-INFO in k.a - End of configuration. 
18:31:42,161 |-INFO in [email protected] - Registering current configuration as safe fallback point 
2017-Aug-13 18:31:42.287 [JavaFX Application Thread] ERROR B.c - No suitable driver found for jdbc:sqlite:merchant.db 
java.sql.SQLException: No suitable driver found for jdbc:sqlite:merchant.db 
    at java.sql.DriverManager.getConnection(DriverManager.java:689) 
    at java.sql.DriverManager.getConnection(DriverManager.java:270) 
    at B.e.<init>(SQLiteDataSource.java:52) 
    at B.e.a(SQLiteDataSource.java:61) 
    at com.datasoft.pay365.merchant.MainApp.start(MainApp.java:94) 
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$162(LauncherImpl.java:863) 
    at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(PlatformImpl.java:326) 
    at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294) 
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95) 
    at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method) 
    at com.sun.glass.ui.gtk.GtkApplication.lambda$null$49(GtkApplication.java:139) 
    at java.lang.Thread.run(Thread.java:748) 

インスタンスを接続:

protected SQLiteDataSource() { 
     connection = null; 
     try { 
      connection = DriverManager.getConnection("jdbc:sqlite:merchant.db"); 
      this.createTable(); 
     } catch (SQLException e) { 
      logger.error(e.getLocalizedMessage()); 
      e.printStackTrace(); 
     } 
    } 

私のアプリケーションのこのsqliteバージョンを実行するには、本当に必要があります。どのように私はそれを解決するのですか?

答えて

0

現在のクラスローダーを使用してドライバをロードしましたか?はい、あなたのライブラリのjarファイルは、あなたのメインのコードによってアクセスできるようにするクラスロードcustomly

Class.forName("org.sqlite.JDBC"); 

をお使いのJavaの呼び出しや、あなたのJavaFXジャーと同じフォルダに含まれたりしている場合は?

+0

いいえ、私は[このライブラリ](https://github.com/xerial/sqlite-jdbc)を使っています。 sqlite jdbc jarファイルを同じフォルダに追加すると、実行されているようです。ライブラリは 'Class.forName(" org.sqlite.JDBC ");' を管理しているので、私はそのような呼び出しをしませんでした。それはカスタムでロードされていません(私がmavenを使用しているという事実を別にすれば、それは役に立ちます)。 私は経験の浅いと聞こえるかもしれません。あなたはそのような問題を解決する方法を提案できますか? – sbs

関連する問題