我正在使用 sqlite-jdbc-3.21.0.jar 驱动程序进行多项选择测验。你可以在这里找到它: https://bitbucket.org/xerial/sqlite-jdbc/downloads/

我创建了一个名为 Database 的类来处理与 SQLite 相关的所有内容:

   package quizpack; 
    import java.sql.Connection; 
    import java.sql.DriverManager; 
    import java.sql.ResultSet; 
    import java.sql.Statement; 
 
    public class Database { 
    Console cnsl = new Console(); 
    ResultSet rs = null; 
    Connection connection = null; 
    Statement stmt = null; 
 
    public Connection connect() { 
        try { 
            connection = DriverManager.getConnection("jdbc:sqlite:./data/data.db"); 
            Class.forName("org.sqlite.JDBC"); 
        } catch (Exception e) { 
            cnsl.println("connect() error: " + e.getMessage()); 
        } 
        return connection; 
    } 
} 

当我在 Eclipse 中运行测验时,它没有给出任何错误。当我编译它时,它不会给出任何错误(打包所需的库)。一旦我在命令提示符下启动 jar 文件,我就会收到消息:禁止的包名称:java.sql。 那将是:java.lang.SecurityException:禁止的包名称:java.sql

这是 connect() 错误的堆栈跟踪:

connect() error: Prohibited package name: java.sql 
java.lang.SecurityException: Prohibited package name: java.sql 
    at java.base/java.lang.ClassLoader.preDefineClass(Unknown Source) 
    at java.base/java.lang.ClassLoader.defineClass(Unknown Source) 
    at java.base/java.security.SecureClassLoader.defineClass(Unknown Source) 
 
    at java.base/java.net.URLClassLoader.defineClass(Unknown Source) 
    at java.base/java.net.URLClassLoader.access$100(Unknown Source) 
    at java.base/java.net.URLClassLoader$1.run(Unknown Source) 
    at java.base/java.net.URLClassLoader$1.run(Unknown Source) 
    at java.base/java.security.AccessController.doPrivileged(Native Method) 
    at java.base/java.net.URLClassLoader.findClass(Unknown Source) 
    at java.base/java.lang.ClassLoader.loadClass(Unknown Source) 
    at java.base/java.lang.ClassLoader.loadClass(Unknown Source) 
    at quiz.Database.connect(Database.java:21) 
    at quiz.Database.buildQuery(Database.java:51) 
    at quiz.Quiz.<init>(Quiz.java:22) 
    at quiz.Main.main(Main.java:13) 
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Nativ 
e Method) 
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknow 
n Source) 
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Un 
known Source) 
        at java.base/java.lang.reflect.Method.invoke(Unknown Source) 
        at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoa 
der.java:58) 

我尝试过的: 更改包名称。 更改我的构建路径的顺序。 尝试了几个将驱动程序 jar 放在源文件夹中的位置。 签署我导出的 jar。 将 jar 添加到我的类路径变量中: database connection not working in jar, but does work in eclipse

现在我是一名初级 Java 程序员,我可能做错了上面的列表。但我希望有人能够阐明到底是什么导致了这个错误的发生。

请您参考如下方法:

这似乎是 Prohibited package name: java 的重复,但你说你改变了你的包名称。

如果您没有将包名称从 java 更改为其他名称,请尝试更改它。否则,删除您的 jar 文件并重建。


评论关闭
IT源码网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!