Запрещенное имя пакета: java

Я попытался получить данные из моей базы данных с именем jaane с именем пользователя Hello и паролем hello. Ошибка:

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);
        }
    }

}

person Ritesh    schedule 30.03.2011    source источник


Ответы (7)


Измените название вашего пакета. java как имя пакета запрещено.

Изменить: переместите ваш Main.java файл в (исходный) каталог, который не начинается с java или javax, и используйте имена структуры каталогов, чтобы изменить имя вашего пакета в коде.

person Buhake Sindi    schedule 30.03.2011

java.lang.SecurityException: Prohibited package name: java

Вы не можете использовать java в качестве имени вашего пакета. Замени его на что-нибудь другое.

person MByD    schedule 30.03.2011

Никогда не храните свой класс в корневом пакете как «java» или никогда не создавайте пакет, начинающийся как java. ... вы можете использовать любой другой идентификатор в качестве имени вашего пакета.

person techasutos    schedule 14.09.2017

Вам нужно указать имя базы данных, и перед localhost есть две косые черты. Я предполагаю, что hello - это ваше имя пользователя, а Hello - пароль ...

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

... то есть после того, как вы измените имя своего пакета на другое, кроме java!

person Costis Aivalis    schedule 30.03.2011
comment
@Raghu: редактируйте свой вопрос, а не ответ. - person BoltClock; 30.03.2011

Посмотрите почему `java.lang.SecurityException: Запрещенный пакет name: java` требуется?

Пользовательскому коду никогда не разрешается помещать классы в один из стандартных пакетов Java. Таким образом, пользовательский код не может получить доступ к каким-либо частным классам / методам / полям пакета в реализации Java. Некоторые из этих закрытых для пакета объектов предоставляют доступ к внутренним компонентам JVM. (В частности, я имею в виду SharedSecrets.)

person yanghaogn    schedule 21.03.2016

У меня была такая же ошибка. Ранее имя пакета было следующим:

package java.com.transaction.statistics.controllers;

Это создано из-за ошибки.

Я исправил, и пакет выглядит следующим образом:

package com.transaction.statistics.controllers;

Теперь это нормально и не показывает никаких ошибок.

person Arefe    schedule 22.04.2021

Если ваш проект инициирован Gradle, я рекомендую вам изменить проект, указав имя пакета, тогда мы сможем избежать проблемы.

gradle init --type java-application --test-framework junit --package packname
person prehistoricpenguin    schedule 24.03.2020