【问题标题】:Exception in thread "main" java.lang.SecurityException: Prohibited package name: java.lang线程“主”java.lang.SecurityException 中的异常:禁止的包名称:java.lang
【发布时间】:2021-04-23 19:20:59
【问题描述】:

我是 Java 新手,我有一个程序返回以下我完全无法弄清楚的错误。我用谷歌搜索了一切。你们能帮帮我吗?

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,并且正在使用文件 S1.java 中的包 java.lang

【问题讨论】:

  • 好的,谢谢,那我应该把我的包名改成什么呢?
  • 你应该创建你自己的包!把你的课放在里面。创建包后,您只需使用其名称即可。
  • 然后导入java.lang?
  • java.lang 是默认包。您不需要导入它。
  • @user2529024 java.lang 总是默认隐式导入,所以不,你不必!

标签: java runtime-error


【解决方案1】:

您不能将新内容放入java.lang 包中。它由语言保留,因为它是核心 Java 内容所在的位置。事实上,java.lang 包中的所有内容都默认隐式导入到任何 Java 代码中。

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

只需更改您的软件包名称(几乎可以更改为其他任何名称),您就可以开始使用了。按照惯例,包名称通常是小写的,但您可以将其命名为对您的项目有意义的任何名称。请参阅tutorial on packages 了解更多信息。

【讨论】:

  • 好的,我没有包名了(删除了它)但是应用程序没有运行。意思是[终止] S1 (2) [Java 应用程序]。
  • +1... @user2529024 你什么都不做,如果你想在控制台使用中打印,在循环之后 System.out.println(str) ,并声明String str out的范围
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

        @credit Chris Jester-Young

        【讨论】:

          【解决方案6】:

          在包名中包含“Java”时出现了同样的错误。我假设您已经对此有了答案,但这些内部包错误可能很难弄清楚。

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

          【讨论】:

            【解决方案7】:

            问题是您在代码中使用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并尝试从外部执行它,你会得到同样的错误。

            【讨论】:

              【解决方案8】:

              这是一个java安全问题,可以通过修改包名来解决。

              【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2011-03-30
              • 2013-01-09
              • 1970-01-01
              • 2014-01-24
              • 2023-03-03
              • 2015-04-16
              • 1970-01-01
              相关资源
              最近更新 更多