You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NetBeans IDE 19同一项目配置两个独立包失败求助

问题分析与解决:NetBeans中测试protected访问修饰符的运行错误

项目背景

我正尝试在NetBeans IDE 19中创建一个包含两个独立包的Java项目,用于测试Java的protected访问修饰符特性。

项目结构

Project: TestAccessModifiersProtected
   \- package: com.agheorghe.testaccessmodifiersprotecteda
       |- class: TestAccessModifiersProtectedA.java
   \- package: com.agheorghe.testaccessmodifiersprotectedb
       |- class: TestAccessModifiersProtectedB.java

运行错误信息

运行TestAccessModifiersProtectedB.java时触发以下错误:

Error: Could not find or load main class com.agheorghe.testaccessmodifiersprotected.TestAccessModifiersProtected
Caused by: java.lang.ClassNotFoundException: com.agheorghe.testaccessmodifiersprotected.TestAccessModifiersProtected
Command execution failed

已尝试的操作

  • 将包com.agheorghe.testaccessmodifiersprotecteda改为com.agheorghe.testaccessmodifiersprotected后运行TestAccessModifiersProtectedB.java - 结果:错误相同
  • 同时将包com.agheorghe.testaccessmodifiersprotectedb改为com.agheorghe.testaccessmodifiersprotected后运行TestAccessModifiersProtectedB.java - 结果:错误相同
  • 将类名改为TestAccessModifiersProtected

代码内容

TestAccessModifiersProtectedA.java

package com.agheorghe.testaccessmodifiersprotecteda;

public class TestAccessModifiersProtectedA {
    
    protected void display() {
        System.out.println("TestAccessModifiersProtectedA");
    }
}

TestAccessModifiersProtectedB.java

package com.agheorghe.testaccessmodifiersprotectedb;
import com.agheorghe.testaccessmodifiersprotecteda.*;

class TestAccessModifiersPotectedB extends TestAccessModifiersProtectedA {
    
    public static void main(String args[]) {
        TestAccessModifiersPotectedB obj = new TestAccessModifiersPotectedB();
        
        /* Prints "TestAccessModifiersPotectedA" */
        obj.display();
    }
}

疑问与需求

为何NetBeans无法运行TestAccessModifiersProtectedB.java?它为何将项目名TestAccessModifiersProtected当作包+类的名称?如何在同一项目中保持两个包相互独立并解决运行问题?


问题原因与解决方法

1. 类名与文件名不匹配(拼写错误)

TestAccessModifiersProtectedB.java的文件名对应的类名应该是TestAccessModifiersProtectedB,但代码里写成了TestAccessModifiersPotectedB(单词Protected少了一个字母r)。Java严格要求类名与文件名完全一致,这会导致编译后无法找到正确的主类。

2. NetBeans运行配置指向错误主类

错误信息中查找的是com.agheorghe.testaccessmodifiersprotected.TestAccessModifiersProtected,说明NetBeans的运行配置里指定的主类并非你当前要运行的TestAccessModifiersProtectedB,而是错误指向了一个不存在的类(项目名被误当作包+类名)。

具体修复步骤

步骤1:修正类名拼写

将TestAccessModifiersProtectedB.java中的类名从TestAccessModifiersPotectedB改为TestAccessModifiersProtectedB,确保类名与文件名完全一致。修正后的代码如下:

package com.agheorghe.testaccessmodifiersprotectedb;
import com.agheorghe.testaccessmodifiersprotecteda.*;

// 修正类名拼写
class TestAccessModifiersProtectedB extends TestAccessModifiersProtectedA {
    
    public static void main(String args[]) {
        TestAccessModifiersProtectedB obj = new TestAccessModifiersProtectedB();
        
        obj.display();
    }
}

步骤2:重新配置NetBeans运行目标

  • 右键点击TestAccessModifiersProtectedB.java文件,选择「Run File」,让NetBeans自动识别并配置正确的主类。
  • 如果仍有问题,手动设置主类:右键项目→「Properties」→「Run」,在「Main Class」下拉框中选择com.agheorghe.testaccessmodifiersprotectedb.TestAccessModifiersProtectedB,点击「OK」保存配置。

步骤3:保持两个包独立的正确方式

  • 无需修改现有包名,com.agheorghe.testaccessmodifiersprotecteda和com.agheorghe.testaccessmodifiersprotectedb的结构完全符合测试protected修饰符的需求:子类在不同包中依然可以访问父类的protected方法。
  • 确保包的目录结构与代码中的package声明一致(NetBeans创建包时会自动生成对应目录,无需手动修改)。

验证

完成上述操作后,再次运行TestAccessModifiersProtectedB.java,控制台应正常输出TestAccessModifiersProtectedA。


内容的提问来源于stack exchange,提问作者Alexandru Gheorghe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 06:41:12