我已经设法编译了java程序,但我不能执行它

我已经设法编译了java程序,但我不能执行它,java,class,executable,Java,Class,Executable,我刚刚在WindowsVista上安装了JDK。之后,我为4个环境变量设置了适当的值:classpath、include、lib、path。在那之后,我能够编译我的HelloWorld程序(我得到了一个*.class文件)。但当我试图执行编译后的程序(我键入java HelloWorldApp)时,它不起作用。Java编写了很多东西,最后编写成“找不到主类:HelloWorldApp”。有谁能帮我解决这个问题吗 您是否在路径中包含了和。?我只是想澄清一下。表示当前目录和。。表示父目录。这说明ja

我刚刚在WindowsVista上安装了JDK。之后,我为4个环境变量设置了适当的值:classpath、include、lib、path。在那之后,我能够编译我的HelloWorld程序(我得到了一个*.class文件)。但当我试图执行编译后的程序(我键入java HelloWorldApp)时,它不起作用。Java编写了很多东西,最后编写成“找不到主类:HelloWorldApp”。有谁能帮我解决这个问题吗

您是否在路径中包含了
?我只是想澄清一下。表示当前目录和。。表示父目录。这说明java必须搜索当前目录和父目录才能找到类。也将相同的内容添加到类路径中。

只是为了清晰起见;您的意思是在默认包中有一个类,即您没有在Java文件中包含包说明符,您的类名为
HelloWorldApp
。编译此文件时,当前目录中有一个类文件
HelloWorldApp.class

假设上述情况属实,然后尝试:

java -cp . HelloWorldApp
例如,以下操作适用于unix机箱:

$ echo 'class HelloWorldApp { public static void main(String []argv) { System.out.println("Hello World!"); } }' > HelloWorldApp.java
$ javac HelloWorldApp.java 
$ java -cp . HelloWorldApp 
Hello World!
当然,您应该将代码缩进一点,而不仅仅是将整个代码压缩到一行;-)

编辑:回答评论:

通常,默认类路径是运行库和。但是,如果设置了
CLASSPATH
变量,那么这将覆盖默认值,并且需要显式地将CLASSPATH设置回其“默认值”。要验证是否设置了
CLASSPATH
环境变量,您可以执行以下操作(同样假设为unix):


如果设置了,这就是为什么需要在类路径上手动包含

如果使用:

java -cp {path to directory with HelloWorldApp in it} HelloWorldApp

该路径应该包含在
CLASSPATH
环境变量中。是否将其导出到命令shell中?您是否需要启动一个新的命令shell来获取最新版本的
CLASSPATH

发布您的代码。我相信问题在于你的主类没有被正确定义。我前几天做的

public static void main(String[] args){
    //code
}
  • 创建一个名为
    HelloWorld.java的文件
  • 将下面发布的代码粘贴到
    HelloWorld.java
    中:
  • 通过在HelloWorld.java所在的同一文件夹中执行命令来编译它:
    javac HelloWorld.java
  • 通过执行:
    java-cp执行代码。HelloWorld
    与HelloWorld.java位于同一文件夹中


  • 类路径是如何工作的,可以在这里阅读:

    类路径的概念以及Java源代码和编译字节代码之间的逻辑差异是出了名的难以正确理解的

    我强烈建议您熟悉Sun Java教程。有关章节如下:


    您是否与.class和.java文件一起位于目录中?我从来没有使用过命令行来执行java代码,我使用IDE,我的*.class和*.java文件在目录中。你有主方法的正确签名吗?好的。它起作用了!如果我输入“java-cp.HelloWorldApp”,我会得到“HelloWorld!”。但我仍然需要找出原因。@Roman,这里可以找到原因:@Bart:这是错误的原因;-)我已经更新了我的答案,以解释最可能的原因。当然,在我的框中,我不需要指定类路径,它仍然有效。也许是,也许不是。通过Roman的“为什么”这句话(或者为什么不),我猜Roman不熟悉Java应用程序执行时幕后发生的事情。我认为WIki文章很好地概述了这个过程(也可以查看该页面底部的链接)。另外请注意,您不必假设Roman正在运行类似*nix的操作系统(请参阅原始问题的第一句):@Bart:您是对的。。。但是,我没有要测试的Windows系统:-)。我的措辞可能有点强硬,当然我认为问题可能是一个全局设置的类路径,但我不能确定…顺便说一句,维基百科页面对于Sun JDK并不完全正确。在Sun JDK上,默认类路径包括当前目录,除非它被重写。我必须承认,我没有阅读整个维基条目,但如果其中的部分内容不正确(不确定你的评论是指哪一部分…),你也许可以编辑它(这就是维基百科的全部内容,对吧?)。
    public static void main(String[] args){
        //code
    }
    
    public class HelloWorld {
        public static void main(String[] args) {
            System.out.println("HelloWorld works!");
        }
    }