【问题标题】:Prohibited package name: java禁止包名:java
【发布时间】:2011-07-26 07:43:58
【问题描述】:

我尝试使用用户名 Hello 和密码 hello 从我的数据库名称 jaane 获取数据。 错误:

java.lang.SecurityException: Prohibited package name: java
        at java.lang.ClassLoader.preDefineClass(ClassLoader.java:480)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
        at java.net.URLClassLoader.access$000(URLClassLoader.java:56)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
Could not find the main class: java.Main.  Program will exit.
Exception in thread "main" Java Result: 1
BUILD SUCCESSFUL (total time: 0 seconds)

我的代码是

package java;

import java.awt.Container;
import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

/**
 *
 * @author ritesh
 */
public class Main extends JFrame{


    public Main() throws SQLException
    {super("Database of Students");
        try {
            Class.forName("org.apache.derby.jdbc.ClientDriver");
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);

        }
     Connection connection = DriverManager.getConnection( "jdbc:derby:/localhost:1527","hello","Hello" );
     Statement statement = connection.createStatement();


 // query database
       ResultSet resultSet =
 statement.executeQuery( "SELECT * FROM COLLEAGUES" );
       StringBuffer results = new StringBuffer();
 ResultSetMetaData metaData = resultSet.getMetaData();
 int numberOfColumns = metaData.getColumnCount();

 for ( int i = 1; i <= numberOfColumns; i++ ) {
 results.append( metaData.getColumnName( i ) + "\t" );
 }

 results.append( "\n" );

 while ( resultSet.next() ) {

 for ( int i = 1; i <= numberOfColumns; i++ ) {
 results.append( resultSet.getObject( i ) + "\t" );
 }


 }

 // close statement and connection
 statement.close();
 connection.close();

// set up GUI and display window
JTextArea textArea = new JTextArea( "Hello");
 Container container = getContentPane();

 container.add( new JScrollPane( textArea ) );

 setSize( 300, 100 ); // set window size
 setVisible( true ); // display window
}

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        try {
            Main window = new Main();
            window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            // TODO code application logic here
        } catch (SQLException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

}

【问题讨论】:

    标签: java package


    【解决方案1】:

    您需要指定数据库名称,并且在 localhost 之前有两个斜杠。我假设你好是你的用户名,你好是密码......

    Connection connection = DriverManager.getConnection( "jdbc:derby://localhost:1527/DatabaseName","hello","Hello" );
    

    ...那是在您将包名称更改为 java 以外的名称之后!

    【讨论】:

    • @Raghu:编辑您的问题而不是答案
    【解决方案2】:
    java.lang.SecurityException: Prohibited package name: java
    

    你不能使用 java 作为你的包名。把它换成别的东西。

    【讨论】:

      【解决方案3】:

      更改您的软件包名称。禁止将java 作为包名。

      编辑:将您的 Main.java 文件移动到不以 javajavax 开头的(源)目录中,并使用目录结构名称来更改您的包名称代码。

      【讨论】:

        【解决方案4】:

        why `java.lang.SecurityException: Prohibited package name: java` is required?

        绝不允许用户代码将类放入标准 Java 包之一。这样,用户代码就无法访问 Java 实现中的任何包私有类/方法/字段。其中一些包私有对象允许访问 JVM 内部。 (我特别想到 SharedSecrets。)

        【讨论】:

          【解决方案5】:

          永远不要将你的类作为“java”保存在根包中,或者永远不要创建以 java 开头的包。 ...您可以使用任何其他标识符作为您的包名称。

          【讨论】:

            【解决方案6】:

            如果你的项目是Gradle启动的,我建议你通过指定包名来更改项目,这样我们就可以避免这个问题。

            gradle init --type java-application --test-framework junit --package packname
            

            【讨论】:

              【解决方案7】:

              我刚刚遇到了同样的错误。之前的包名如下:

              package java.com.transaction.statistics.controllers;
              

              这是由于错误而创建的。

              我更正了,包装如下:

              package com.transaction.statistics.controllers;
              

              现在很好,没有显示任何错误。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2011-03-30
                • 2018-08-07
                • 1970-01-01
                • 2014-07-12
                • 2010-10-18
                • 1970-01-01
                • 2021-05-17
                • 2019-05-20
                相关资源
                最近更新 更多