编译器问题

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:

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

如果选择此选项,则每次编译或运行程序时都必须在javacjava命令之前添加C:\jdk1.8.0\bin\。为了避免这种额外的输入,请查阅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 。在提示符下,您将键入以下命令,然后按回车键:

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

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

**Class names, 'HelloWorldApp', are only accepted if annotation processing is explicitly requested**
如果收到此错误,则在编译程序时忘记了添加.java后缀。请记住,是命令javac HelloWorldApp.java,不是javac HelloWorldApp
语法错误(所有平台)
如果您键入错误的程序部分,则编译器可能会发出语法错误。该消息通常显示错误的类型,检测到错误的行号,该行上的代码以及错误在代码中的位置。这是由于语句末尾省略分号(;)引起的错误:

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

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

while (System.in.read() != -1)
count++
System.out.println(“Input has “ + count + “ chars.”);
处理此代码时,编译器会发出两个错误消息:

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

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

如果看到任何编译器错误,则说明您的程序未成功编译,并且编译器未创建.class文件。仔细验证程序,修复检测到的所有错误,然后重试。
语义错误
除了验证程序在语法上是正确的以外,编译器还会检查其他基本正确性。例如,每次您使用未初始化的变量时,编译器都会警告您:

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

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

运行时问题

Microsoft Windows系统上的错误消息
Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorldApp
如果收到此错误,则是java找不到字节码文件HelloWorldApp.class
java试图找到.class文件的地方之一是当前目录。因此,如果.class文件位于C:\java中,则应将当前目录更改为该目录。要更改目录,请在提示符下键入以下命令,然后按Enter:

  1. cd c:\java

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

如果仍然有问题,则可能必须更改CLASSPATH变量。要查看是否有必要,请尝试使用以下命令设置类路径。

  1. set CLASSPATH=

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

**Could not find or load main class HelloWorldApp.class**
初学者程序员经常犯的一个错误是,尝试在由编译器创建的.class文件上运行java启动器。例如,如果您尝试使用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中,则应将当前目录更改为该目录。要更改目录,请在提示符下键入以下命令,然后按回车键:

  1. cd /home/jdoe/java

如果在提示符下输入pwd,应该看到/home/jdoe/java。如果在提示符下输入ls,应该会看到.java.class文件。现在再次输入java HelloWorldApp

如果仍然有问题,则可能必须更改CLASSPATH环境变量。要查看是否有必要,请尝试使用以下命令修改类路径。

  1. unset CLASSPATH

现在再次输入java HelloWorldApp。如果程序现在可以运行,则必须以与上述PATH变量相同的方式更改CLASSPATH变量。
**Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorldApp/class**
初学者程序员经常犯的一个错误是,尝试在由编译器创建的.class文件上运行java启动器。例如,如果您尝试使用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项目,您可以通过扩展项目文件夹,双击打开从NetBeans IDE中的文件选项卡清单文件MANIFEST.MF。
  • 验证应用程序是否由有效证书签名,并且该证书位于Signer CA密钥库中。
  • 如果您正在运行本地小程序,请设置Web服务器以进行测试。您还可以将应用程序添加到例外站点列表中,该列表在Java控制面板的“安全性”选项卡中进行管理。