线程“main”中的异常java.lang.SecurityException:禁止的包名:java.lang

时间:2013-06-27 22:27:16

标签: java runtime-error

我是Java的新手,我有一个程序正在返回以下错误,我完全无法弄明白。我用Google搜索了一切。你能帮助我吗?

package java.lang;
public class S1 {
public static void main(String[] args) {
    for (int i=1;i<=1000;i++)
        {
            String str = "1" +i;
        }
    }
}

Exception in thread "main" java.lang.SecurityException: Prohibited package name: java.lang
    at java.lang.ClassLoader.preDefineClass(Unknown Source)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at java.security.SecureClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.access$100(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)

我正在使用Eclipse,并正在使用文件java.lang中的包S1.java

8 个答案:

答案 0 :(得分:7)

您无法将新内容放入java.lang包中。它由语言保留,因为这是核心Java内容已经存在的地方。实际上,java.lang包中的所有内容都默认在任何Java代码中隐式导入。

它包含“对Java编程语言设计至关重要的类”。 (来自the docs)。由于用户定义的类根据定义不能对语言的设计至关重要,因此禁止将内容放在那里。允许用户将代码放在java.lang包中也是一个问题,因为这会将在那里定义的任何包域内容暴露给用户。

只需更改您的包裹名称(几乎任何其他内容),您就可以了。按照惯例,软件包名称通常是小写的,但您可以使它适合您的项目。有关详情,请参阅tutorial on packages

答案 1 :(得分:3)

右键单击你的包点击reflactor然后重命名它.....因为你使用了内部变量..见下图..

enter image description here

答案 2 :(得分:2)

java.lang是来自jvm的系统包,它被隐式导入到java源代码,所以它已经被带到你不能拥有相同的包名

答案 3 :(得分:1)

您的包名与java。中提供的“内部”包一致。

答案 4 :(得分:1)

永远不允许用户代码将类放入其中一个标准Java包中。这样,用户代码就无法访问Java实现中的任何包私有类/方法/字段。其中一些包私有对象允许访问JVM内部。

@credit Chris Jester-Young

答案 5 :(得分:1)

在软件包名称中包含“ Java”只是发生了相同的错误。我以为您已经对此有了答案,但是这些内部软件包错误可能很难弄清楚。

只需更改包裹名称,您就应该是Gucci。

答案 6 :(得分:0)

问题是您在代码中使用了 package 而不是 import

// package java.lang; <-- this is wrong! You don't need it 

public class S1 {
    public static void main(String[] args) {
        for (int i=1;i<=1000;i++)
        {
            String str = "1" +i;
        }
    }
}

另外不要将您的代码放在一个文件夹中调用 java 并尝试从外部执行它,您会得到同样的错误。

答案 7 :(得分:0)

这是一个java安全问题,它会通过改变包名来解决。