文档

Java™教程
路径: 入门

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

编译器问题

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

'javac' 不是内部或外部命令,也不是可运行的程序或批处理文件

如果你收到这个错误,表示Windows无法找到编译器(javac)。

以下是一种告诉Windows如何找到javac的方法。假设你将JDK安装在C:\jdk1.8.0中。在命令提示符下,你需要输入以下命令并按Enter键:

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

如果你选择这个选项,每次编译或运行程序时,都需要在javacjava命令前加上C:\jdk1.8.0\bin\。为了避免这样额外的输入,可以参考JDK 8安装说明中的更新PATH变量部分。

类名'HelloWorldApp'只有在显式请求注释处理时才被接受

如果你收到这个错误,表示在编译程序时忘记了包含.java后缀。记住,命令应该是javac HelloWorldApp.java而不是javac HelloWorldApp

UNIX系统上的常见错误信息

javac: Command not found

如果你收到这个错误,表示UNIX找不到编译器javac

以下是一种告诉UNIX如何找到javac的方法。假设你将JDK安装在/usr/local/jdk1.8.0中。在命令提示符下,你需要输入以下命令并按Enter键:

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

注意:如果你选择这个选项,每次编译或运行程序时,都需要在javacjava命令前加上/usr/local/jdk1.8.0/。为了避免这样额外的输入,你可以将这些信息添加到你的PATH变量中。具体步骤将根据你当前运行的shell而有所不同。

类名'HelloWorldApp'只有在显式请求注释处理时才被接受

如果你收到这个错误,表示在编译程序时忘记了包含.java后缀。记住,命令应该是javac HelloWorldApp.java而不是javac HelloWorldApp

语法错误(所有平台通用)

如果你在程序中拼写错误,编译器可能会发出语法错误。错误消息通常会显示错误的类型、检测到错误的行号、该行的代码以及错误在代码中的位置。以下是因为省略了语句末尾的分号(;)而导致的错误示例:

Testing.java:8: 错误: 应有';'
            count++
                   ^
1 个错误

如果你看到任何编译器错误,那么你的程序没有成功编译,编译器也没有创建.class文件。仔细检查程序,修复任何错误,并再试一次。

语义错误

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

Testing.java:8: 错误: 变量 count 可能未被初始化
            count++;
            ^
Testing.java:9: 错误: 变量 count 可能未被初始化
        System.out.println("输入中有 " + count + " 个字符。");
                                          ^
2 个错误

同样,你的程序没有成功编译,编译器也没有创建.class文件。修复错误后再试一次。

运行时问题

Microsoft Windows系统上的错误信息

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

如果你收到这个错误,java找不到你的字节码文件HelloWorldApp.class

java尝试查找.class文件的位置之一是当前目录。所以,如果你的.class文件在C:\java中,你应该将当前目录更改为该目录。要更改目录,键入以下命令并按Enter:

cd c:\java

提示符应该变为C:\java>。如果你在提示符处输入dir,你应该看到你的.java.class文件。现在再次输入java HelloWorldApp

如果仍然有问题,你可能需要更改CLASSPATH变量。要查看是否需要这样做,请尝试使用以下命令清除classpath。

set CLASSPATH=

现在再次输入java HelloWorldApp。如果程序现在可以工作,你将需要更改CLASSPATH变量。要设置此变量,请参考JDK 8安装说明中的更新PATH变量部分。CLASSPATH变量的设置方式相同。

无法找到或加载主类 HelloWorldApp.class

初学者程序员常犯的一个错误是尝试在编译器创建的.class文件上运行java启动器。例如,如果你尝试使用java HelloWorldApp.class而不是java HelloWorldApp来运行程序,就会出现这个错误。记住,参数是你想要使用的类的名称,而不是文件名。

主线程中的异常 "main" java.lang.NoSuchMethodError: main

Java虚拟机要求您执行的类必须有一个main方法作为应用程序的入口点。《深入了解“Hello World!”应用程序》详细讨论了main方法。

UNIX系统上的错误信息

主线程中的异常 "main" java.lang.NoClassDefFoundError: HelloWorldApp

如果您收到此错误消息,java无法找到您的字节码文件HelloWorldApp.class

java尝试查找字节码文件的位置之一是您的当前目录。因此,例如,如果您的字节码文件位于/home/jdoe/java中,您应该将当前目录更改为该目录。要更改目录,请在提示符处键入以下命令并按回车:

cd /home/jdoe/java

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

如果仍然存在问题,您可能需要更改CLASSPATH环境变量。要查看是否需要此操作,请尝试使用以下命令清除类路径。

unset CLASSPATH

现在再次输入java HelloWorldApp。如果程序现在可以正常运行,您将需要以与上述PATH变量相同的方式更改CLASSPATH变量。

主线程中的异常 "main" java.lang.NoClassDefFoundError: HelloWorldApp/class

初学者常犯的一个错误是尝试在编译器创建的.class文件上运行java启动器。例如,如果您尝试使用java HelloWorldApp.class而不是java HelloWorldApp来运行程序,您将收到此错误。请记住,参数是您想要使用的类的名称,而不是文件名。

主线程中的异常 "main" java.lang.NoSuchMethodError: main

Java虚拟机要求您执行的类必须有一个main方法作为应用程序的入口点。《深入了解“Hello World!”应用程序》详细讨论了main方法。

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

如果您在浏览器中运行应用程序并收到安全警告,指示应用程序被阻止,请检查以下内容:


上一页: 上一课
下一页: Trail 结束