Java Netbeans 找不到符号

Java Netbeans Cannot Find Symbol

我正在完成 Java 编程教科书中的练习作业,遇到了常见的“错误:找不到符号”。我必须创建一个引用同一目录中另一个 class 的应用程序,但编译器无法找到 class.

这是 SpaService.java 的代码:

package com.spaservice;

public class SpaService {
    private String serviceDescription;
    private double price;
    
    public void setServiceDescription(String service){
        serviceDescription = service;
    }
    public void setPrice(double servicePrice){
        price = servicePrice;
    }
    
    public String getServiceDescription(){
        return serviceDescription;
    }
    public double getPrice(){
        return price;
    }
}

这是我的 CreateSpaServices.java

代码
package com.spaservice;
import java.util.Scanner;

public class CreateSpaServices {

    public static void main(String args[]) {
        String service;
        double price;
        
        SpaService firstService = new SpaService();
        SpaService secondService = new SpaService();
        Scanner keyboard = new Scanner(System.in);

        System.out.print("Enter service >> ");
        service = keyboard.nextLine();
        System.out.print("Enter price >> ");
        price = keyboard.nextDouble();
        
        firstService.setServiceDescription(service);
        firstService.setPrice(price);
        
        keyboard.nextLine();
        System.out.print("Enter service >> ");
        service = keyboard.nextLine();
        System.out.print("Enter price >> ");
        price = keyboard.nextDouble();
        
        secondService.setServiceDescription(service);
        secondService.setPrice(price);
        
        System.out.println("First service details:");
        System.out.println(firstService.getServiceDescription() +
        " $" + firstService.getPrice());
        System.out.println("Second service details:");
        System.out.println(secondService.getServiceDescription() +
        " $" + secondService.getPrice());
    }
}

这是一个相当简单的程序,但由于某些原因 CreateSpaServices.java 找不到 SpaService.class。这是 Windows:

中我的命令提示符的输出
> C:\Users\waxyshaw\Desktop\School\CH3-EX11\SpaService\src\main\java\com\spaservice>java
> CreateSpaServices.java CreateSpaServices.java:18: error: cannot find
> symbol
>         SpaService firstService = new SpaService();
>         ^   symbol:   class SpaService   location: class CreateSpaServices CreateSpaServices.java:18: error: cannot find symbol
>         SpaService firstService = new SpaService();
>                                       ^   symbol:   class SpaService   location: class CreateSpaServices CreateSpaServices.java:19: error:
> cannot find symbol
>         SpaService secondService = new SpaService();
>         ^   symbol:   class SpaService   location: class CreateSpaServices CreateSpaServices.java:19: error: cannot find symbol
>         SpaService secondService = new SpaService();
>                                        ^   symbol:   class SpaService   location: class CreateSpaServices 4 errors error: compilation failed

这是我的目录结构:

C:\Users\waxyshaw\Desktop\School\CH3-EX11\SpaService\src\main\java\com\spaservice>dir
 Volume in drive C has no label.
 Volume Serial Number is 9A2C-802D

 Directory of C:\Users\waxyshaw\Desktop\School\CH3-EX11\SpaService\src\main\java\com\spaservice

05/29/2021  17:26    <DIR>          .
05/29/2021  17:26    <DIR>          ..
05/29/2021  17:28             1,418 CreateSpaServices.java
05/29/2021  17:25               590 SpaService.java
               2 File(s)          2,008 bytes
               2 Dir(s)  609,747,128,320 bytes free

我正在使用 Netbeans 12.3 编写这段代码,并且使用 IDE 可以很好地编译它。我在 Windows 10.

根据研究,我在 Stack Overflow 上看到了类似的问题。我已经尝试 运行 来自我的 src 文件夹、我的 java 文件夹和我的 com 文件夹的命令,结果相似。我怀疑这个问题可能与软件包有关,但我对 Java 的了解还不足以自行解决问题。我希望我能从社区得到一些帮助。

告诉我你的想法。任何帮助将不胜感激。

编辑:根据要求,我提供了错误的屏幕截图:

Error-Screenshot

Edit2:在 NetBeans 中包含输出 window 的屏幕截图:

Netbeans-Output

您用于执行程序的命令 java CreateSpaServices.java 不适用于具有多个源文件的程序。它用于执行单源文件 java 程序而无需编译。有关详细信息,请参阅 JEP330

通常您会编写 Java 代码,编译它 (javac),然后 运行 它 (java)。您可以手动使用或使用像 NetBeans 这样的编辑器。

所以您在上面显示的命令表明您使用 NetBeans 只是作为编辑器而不是 运行 也不使用 NetBeans 的编译。原因不明。

通常您会使用 NetBeans 作为您的编辑器和编译器。意味着您在 NetBeans 中编写代码,然后创建可以从命令行执行的 jarclass 文件。

当你只想运行程序时你可以Right Click CreateSpaServices \ Run File执行CreateSpaServicesMain方法。

我设法让它工作了。就像这里的许多其他帖子一样,您必须从根目录进行编译。 NetBeans 在您第一次启动项目时创建了如此多的目录,这让您感到困惑。

我的包裹是 com.spaservice。我必须从 src\main\java 文件夹编译 class。然后 java 文件能够在编译期间找到另一个 class。