资讯专栏INFORMATION COLUMN

Java™ 教程(常见问题及其解决方案)

netmou / 2512人阅读

常见问题(及其解决方案) 编译器的问题

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.0injavac HelloWorldApp.java

如果你选择此选项,你必须在你的javacjava命令之前使用C:jdk1.8.0in,每次编译或运行一个程序时,为了避免这种额外的输入,请参考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,在提示符下输入以下命令并按回车:

/usr/local/jdk1.8.0/javac HelloWorldApp.java
如果你选择此选项,那么每次编译或运行一个程序时,你都必须在你的javac和java命令之前加上/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

语法错误(所有平台)

如果你错误地编写程序的一部分,编译器可能会发出语法错误,消息通常显示错误的类型、检测错误的行号、行上的代码以及代码中错误的位置,在语句末尾省略分号(;)会导致以下错误:

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文件,仔细检查程序,修复你检测到的任何错误,然后再次尝试。

语义错误

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

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文件,修复错误并再次尝试。

运行时的问题

Microsoft Windows系统上的错误消息。

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

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

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

cd c:java

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

如果仍然有问题,你可能需要更改CLASSPATH变量,要查看是否需要这样做,请尝试使用以下命令对类路径进行截断。

set CLASSPATH=

现在再次输入java HelloWorldApp,如果该程序现在可以工作,那么你必须更改CLASSPATH变量,要设置此变量,请参阅JDK 8安装说明中更新路径变量一节,CLASSPATH变量的设置方式相同。

Could not find or load main class HelloWorldApp.class

初学者程序员常犯的一个错误是尝试在编译器创建的.class文件上运行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中,你应该将当前目录更改为该目录,若要更改目录,请在提示符处输入以下命令并按回车:

cd /home/jdoe/java

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

如果你仍然有问题,你可能需要更改CLASSPATH环境变量,要查看是否需要这样做,请尝试使用以下命令对类路径进行截断。

unset CLASSPATH

现在再次输入java HelloWorldApp,如果该程序现在可以工作,那么你将必须以与上面的PATH变量相同的方式更改CLASSPATH变量。

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

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

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

Java VM要求使用它的类有一个主要的方法来开始执行应用程序,详解“Hello World!”应用中详细讨论了main方法。

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

如果你正在通过浏览器运行一个应用程序,并得到安全警告说该应用程序被阻塞,请检查以下条目:

验证JAR文件清单中的属性是否为应用程序正在运行的环境正确设置,需要使用Permissions属性,在NetBeans项目中,你可以通过扩展项目文件夹和双击manifest.mf,从NetBeans IDE的Files选项卡中打开清单文件。

验证应用程序是由一个有效的证书签名的,并且该证书位于签名者CA keystore中。

如果你正在运行一个本地applet,请设置一个用于测试的web服务器,你还可以将应用程序添加到异常站点列表中,该列表在Java控制面板的Security选项卡中进行管理。

上一篇:仔细看看“Hello World!”应用程序 下一篇:面向对象编程概念

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/76425.html

相关文章

  • Java教程(“Hello World!”应用程序)

    Hello World!应用程序 下面列出的小节提供了编译和运行一个简单的Hello World!应用程序的详细说明,第一部分提供了关于使用NetBeans IDE入门的信息,集成开发环境极大地简化了软件开发过程。NetBeans IDE运行在下面列出的所有平台上,其余部分提供了特定于平台的指示,用于在没有集成开发环境的情况下启动。如果遇到问题,一定要参考常见问题部分,它为新用户遇到的许多问题提供...

    skinner 评论0 收藏0
  • Java教程(目录)

    Java™ 教程 Java教程是为JDK 8编写的,本页面中描述的示例和实践没有利用在后续版本中引入的改进。 Java教程是希望使用Java编程语言创建应用程序的程序员的实用指南,其中包括数百个完整的工作示例和数十个课程,相关课程组被组织成教程。 覆盖基础知识的路径 这些教程以书籍的形式提供,如Java教程,第六版,前往Amazon.com购买。 入门 介绍Java技术和安装Java开发软件并使用...

    lifesimple 评论0 收藏0
  • Java教程(仔细看看“Hello World!”应用程序)

    仔细看看Hello World!应用程序 现在你已经看到了Hello World!应用程序(甚至可能编译并运行它),你可能想知道它是如何工作的,这是它的代码: class HelloWorldApp { public static void main(String[] args) { System.out.println(Hello World!); // Display ...

    zollero 评论0 收藏0
  • 架构~微服务

    摘要:接下来继续介绍三种架构模式,分别是查询分离模式微服务模式多级缓存模式。分布式应用程序可以基于实现诸如数据发布订阅负载均衡命名服务分布式协调通知集群管理选举分布式锁和分布式队列等功能。 SpringCloud 分布式配置 SpringCloud 分布式配置 史上最简单的 SpringCloud 教程 | 第九篇: 服务链路追踪 (Spring Cloud Sleuth) 史上最简单的 S...

    xinhaip 评论0 收藏0
  • Java教程(Object作为超类)

    Object作为超类 java.lang包中的Object类位于类层次结构树的顶部,每个类都是Object类的直接或间接的后代,你使用或编写的每个类都继承Object的实例方法,你不需要使用任何这些方法,但是,如果你选择这样做,你可能需要使用特定于你的类的代码重写它们,本节中讨论的从Object继承的方法是: protected Object clone() throws CloneNotSu...

    RichardXG 评论0 收藏0

发表评论

0条评论

netmou

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<