禁止的软件包名称:java
问题描述:
我试图从我的数据库名称中以jaane的形式获取数据,其中包含用户名Hello和密码hello。 错误:禁止的软件包名称:java
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);
}
}
}
答
你需要指定数据库名,并有本地主机前两条斜线。我假设你好你的用户名和你好密码...
Connection connection = DriverManager.getConnection("jdbc:derby://localhost:1527/DatabaseName","hello","Hello");
...这是你改变你的包名称之后,不是java!
答
java.lang.SecurityException: Prohibited package name: java
您不能使用java作为包的名称。把它换成别的东西。
答
更改包名称。作为包名称的java
被禁止。
编辑:将你的Main.java
文件在不与java
或javax
启动和使用目录结构名称中的代码来改变你的包名(源)目录。
答
看why `java.lang.SecurityException: Prohibited package name: java` is required?
User code is never allowed to put classes into one of the standard Java packages. That way, user code cannot access any package-private classes/methods/fields in the Java implementation. Some of those package-private objects allow access to JVM internals. (I'm thinking of SharedSecrets in particular.)
答
千万不要让你的类的根包为“Java”的或从未创建一个包开始如Java。 ...您可以使用任何其他标识符作为您的软件包名称。
@Raghu:编辑你的**问题**而不是**答案**。 – BoltClock 2011-03-30 19:03:55