类:常见问题(及其解决方案)

Compiler Problems

Microsoft Windows 系统上的常见错误消息

'javac' is not recognized as an internal or external command, operable program or batch file

如果收到此错误,则 Windows 将找不到编译器(javac)。

这是告诉 Windows 在哪里找到javac的一种方法。假设您在C:\jdk1.8.0中安装了 JDK。在提示符下,键入以下命令,然后按 Enter:

C:\jdk1.8.0\bin\javac HelloWorldApp.java

如果选择此选项,则每次编译或运行程序时,都必须在javacjava命令之前加上C:\jdk1.8.0\bin\。为了避免这种额外的 Importing,请查阅 JDK 8 安装说明中的更新 PATH 变量部分。

Class names, 'HelloWorldApp', are only accepted if annotation processing is explicitly requested

如果收到此错误,则在编译程序时忘记包含.java后缀。请记住,命令是javac HelloWorldApp.java而不是javac HelloWorldApp

UNIX 系统上的常见错误消息

javac: Command not found

如果收到此错误,则 UNIX 无法找到编译器javac

这是告诉 UNIX 在哪里找到javac的一种方法。假设您在/usr/local/jdk1.8.0中安装了 JDK。在提示符下,键入以下命令,然后按 Return 键:

/usr/local/jdk1.8.0/javac HelloWorldApp.java

注意: 如果选择此选项,则每次编译或运行程序时,都必须在javacjava命令之前加上/usr/local/jdk1.8.0/。为了避免这种额外的 Importing,您可以将此信息添加到 PATH 变量中。这样做的步骤将根据您当前正在运行的 Shell 而有所不同。

Class names, 'HelloWorldApp', are only accepted if annotation processing is explicitly requested

如果收到此错误,则在编译程序时忘记包含.java后缀。请记住,命令是javac HelloWorldApp.java而不是javac HelloWorldApp

语法错误(所有平台)

如果您键入错误的程序部分,则编译器可能会发出语法错误。该消息通常显示错误的类型,检测到错误的行号,该行上的代码以及错误在代码中的位置。这是由于在语句末尾省略分号(;)导致的错误:

testing.java:14: `;' expected.
System.out.println("Input has " + count + " chars.")
                                                     ^
1 error

有时,编译器无法猜测出您的意图,并且如果错误在多行中级联,则会打印出令人困惑的错误消息或多个错误消息。例如,以下代码片段从粗体行省略了分号(;):

while (System.in.read() != -1)
    count++
System.out.println("Input has " + count + " chars.");

处理此代码时,编译器会发出两个错误消息:

testing.java:13: Invalid type expression.
        count++
                 ^
testing.java:14: Invalid declaration.
    System.out.println("Input has " + count + " chars.");
                      ^
2 errors

编译器发出两条错误消息,因为在处理count++之后,编译器的状态表明它位于表达式的中间。没有分号,编译器将无法知道该语句是完整的。

如果看到任何编译器错误,则说明您的程序未成功编译,并且编译器未创建.class文件。仔细验证程序,修复检测到的所有错误,然后重试。

Semantic Errors

除了验证程序在语法上是正确的之外,编译器还会检查其他基本正确性。例如,每次您使用未初始化的变量时,编译器都会警告您:

testing.java:13: Variable count may not have been initialized.
        count++
        ^
testing.java:14: Variable count may not have been initialized.
    System.out.println("Input has " + count + " chars.");
                                       ^
2 errors

同样,您的程序未成功编译,并且编译器未创建.class文件。解决错误,然后重试。

Runtime Problems

Microsoft Windows 系统上的错误消息

Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorldApp

如果收到此错误,则java找不到字节码文件HelloWorldApp.class

java试图找到.class文件的地方之一是当前目录。因此,如果.class文件位于C:\java中,则应将当前目录更改为该目录。要更改目录,请在提示符下键入以下命令,然后按 Enter:

cd c:\java

提示应更改为C:\java>。如果在提示符下 Importingdir,则应该看到.java.class文件。现在再次 Importingjava HelloWorldApp

如果仍然有问题,则可能必须更改 CLASSPATH 变量。要查看是否有必要,请try使用以下命令破坏 Classpath。

set CLASSPATH=

现在再次 Importingjava HelloWorldApp。如果程序现在可以运行,则必须更改 CLASSPATH 变量。要设置此变量,请参阅 JDK 8 安装说明中的更新 PATH 变量部分。 CLASSPATH 变量的设置方式相同。

Could not find or load main class HelloWorldApp.class

Starters 程序员经常犯的一个错误是try在由编译器创建的.class文件上运行java启动器。例如,如果try使用java HelloWorldApp.class而不是java HelloWorldApp运行程序,则会出现此错误。请记住,该参数是您要使用的类的名称,而不是文件名。

Exception in thread "main" java.lang.NoSuchMethodError: main

Java VM 要求您与其一起执行的类具有main方法,从该处开始执行应用程序。 仔细看看“ Hello World!”应用详细讨论main方法。

UNIX 系统上的错误消息

Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorldApp

如果收到此错误,则java找不到字节码文件HelloWorldApp.class

java试图找到您的字节码文件的地方之一是当前目录。因此,例如,如果您的字节码文件位于/home/jdoe/java中,则应将当前目录更改为该目录。要更改目录,请在提示符下键入以下命令,然后按 Return 键:

cd /home/jdoe/java

如果在提示符下 Importingpwd,则应看到/home/jdoe/java。如果在提示符下 Importingls,则应该看到.java.class文件。现在再次 Importingjava HelloWorldApp

如果仍然有问题,则可能必须更改 CLASSPATH 环境变量。要查看是否有必要,请try使用以下命令破坏 Classpath。

unset CLASSPATH

现在再次 Importingjava HelloWorldApp。如果程序现在可以运行,则必须以与上述 PATH 变量相同的方式更改 CLASSPATH 变量。

Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorldApp/class

Starters 程序员经常犯的一个错误是try在由编译器创建的.class文件上运行java启动器。例如,如果try使用java HelloWorldApp.class而不是java HelloWorldApp运行程序,则会出现此错误。请记住,该参数是您要使用的类的名称,而不是文件名。

Exception in thread "main" java.lang.NoSuchMethodError: main

Java VM 要求您与其一起执行的类具有main方法,从该处开始执行应用程序。 仔细看看“ Hello World!”应用详细讨论main方法。

Applet 或 Java Web Start 应用程序被阻止

如果您正在通过浏览器运行应用程序,并收到表示该应用程序被阻止的安全警告,请检查以下各项:

  • 验证是否已针对运行应用程序的环境正确设置了 JAR 文件清单中的属性。 Permissions 属性是必需的。在 NetBeans 项目中,可以通过展开项目文件夹并 Double 击manifest\.mf从 NetBeans IDE 的“文件”选项卡中打开清单文件。

  • 验证应用程序是否由有效证书签名,并且该证书位于 Signer CA 密钥库中。

  • 如果您正在运行本地 Servlets,请设置 Web 服务器以进行测试。您还可以将应用程序添加到 exception 站点列表,该列表在 Java 控制面板的“安全性”选项卡中进行 管理。