"无法找到或加载主要课程"使用cmd提示符运行java程序时出错

时间:2014-05-07 23:27:13

标签: java cmd classpath environment-variables

我正在运行一个简单的“HelloWorld”计划。我在命令提示符中收到此错误:

  

无法找到或加载主要课程HelloWorld

我在系统中设置了CLASSPATHPATH变量。在cmd提示符下,我从保存HelloWorld程序的目录运行。我可以看到类名和文件名相同,并且在同一目录中创建了.class文件。还有什么可能是问题?

我的示例程序如下所示:

package org.tij.exercises;
public class HelloWorld {
  public static void main(String[] args) {
    // TODO Auto-generated method stub
    System.out.println("Hello World!!");
  }
}

15 个答案:

答案 0 :(得分:38)

当Main类在包中时,您需要按如下方式运行它:

java <packageName>.<MainClassName>

在您的情况下,您应按如下方式运行程序:

java org.tij.exercises.HelloWorld 

答案 1 :(得分:18)

您的CLASSPATH值是什么?

看起来像这样:

 .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar 

我猜您的值不包含此.;

所以,添加IT 完成后,重新启动 CMD

这可能有效。


例如,文件HelloWorld.java位于路径中:D:\myjavatest\org\yz\test且其package为:org.yz.test

现在,您已经在CMD专线的D:\myjavatest\路径上了 输入以编译它:

javac org/yz/test/HelloWorld.java

然后,输入以运行它:

java org.yz.test.HelloWorld

你可能得到你想要的东西。

答案 2 :(得分:12)

我从bin删除了CLASSPATH。我发现我正在从java所在的目录执行HelloWorld.java命令,即:

C:\Users\xyz\Documents\Java\javastudy\src\org\tij\exercises>java HelloWorld

所以我搬回主目录并执行:

java org.tij.exercises.HelloWorld

它有效,即:

C:\Users\xyz\Documents\Java\javastudy\src>java org.tij.exercises.HelloWorld

Hello World !!

答案 3 :(得分:4)

由于您是从命令提示符运行它,因此需要确保classpath正确无误。如果已经设置,则需要重新启动终端以重新加载系统变量。

如果未使用-classpath-cp并且未设置CLASSPATH,则使用当前目录(.),但运行.class个文件时,您需要位于包含Java package name个文件夹的文件夹中。

因此,.class中有./target/classes/com/foo/app/App.class个文件,您有以下几种可能:

java -cp target/classes com.foo.app.App
CLASSPATH=target/classes java com.foo.app.App
cd target/classes && java com.foo.app.App

您可以打印CLASSPATH变量:

来检查您的类路径
  • Linux:echo $CLASSPATH
  • Windows:echo %CLASSPATH%

其条目以:分隔。

另请参阅:How do I run Java .class files?

答案 4 :(得分:3)

此错误的一个原因可能是

  

无法找到或加载主要课程<class name>

也许您使用您的类名作为其他名称,并使用其他名称保存类名,您可以使用除类名之外的其他名称保存Java源文件名。例如:

class A{
    public static void main(String args[]) {
        System.out.println("Hello world");
    }
}

您可以另存为Hello.java,但

编译:{{1​​}}

这将在同一位置自动生成A.class文件。

现在运行:javac Hello.java

答案 5 :(得分:3)

我有同样的问题,虽然我没有包名,但我有点不同。我的问题是类路径,例如:

C:\Java Example>java -cp . HelloWorld 

Java的-cp选项以及我从我的经验中可以看出的(不多)但是我遇到了大约20次尝试不同方法的错误,直到我声明类路径我收到相同的错误。 Vishrant说明的是正确的。代表当前目录。

如果您需要有关java选项的更多信息,请输入java -?java -help我认为这些选项不是可选的。

我刚做了一些研究,我发现了一个详细介绍CLASSPATH的网站。必须将CLASSPATH设置为环境变量;到当前目录&lt;。&gt;。您可以从windows中的命令行进行设置:

// Set CLASSPATH to the current directory '.'
prompt> set CLASSPATH=.

添加新环境设置时,需要在启用变量之前重新启动。但是从命令提示符处可以设置它。它也可以像我在开头提到的那样设置。有关详细信息,如果您使用其他操作系统,请检查:Environment Variables

答案 6 :(得分:2)

使用java -d . HelloWorld命令执行Java程序。

当您声明包时,此命令有效。

.代表当前目录/。

答案 7 :(得分:2)

在win10上运行java时遇到了类似的问题

而不是

$ java ./hello
Error: Could not find or load main class ..hello

运行

$ java hello
Hello, World

答案 8 :(得分:2)

在运行JAVA类时忘记删除 .class 扩展名时,我得到了完全相同的错误。所以不要这样:

java myClass.class

应该这样做:

java myClass

答案 9 :(得分:0)

我遇到了同样的问题,并尝试了这里提到的一切。 事情是我在课堂创建后没有在eclipse中刷新我的项目。 一旦我精神焕发,事情就会按预期发挥作用。

答案 10 :(得分:0)

面临同样的问题。通过以下步骤解决

  • 转到包含'org.tij.exercises'包的目录(例如:在eclipse中它可能是你的src文件夹)
  • 使用java org.tij.exercises.HelloWorld

答案 11 :(得分:0)

对于我们很多人,至少对我来说,我认为类路径层次结构并不直观,因为我在目录结构中工作,感觉应该是它。

Java正在根据它的包路径查看类的名称,而不仅仅是文件路径。

如果符合以下条件并不重要: 我在本地目录./packagefoo/MainClass,或 一个目录./packagefoo/,或 一个下来./packagefoo/MainClass/foo。

命令&#34; java packagefoo.MainClass&#34;正在运行根%CLASSPATH%,这意味着Java的重要性。然后从那里它遍历包名,而不是像我们这样的编码人员期望的路径名。

因此,如果我的CLASSPATH设置为%CWD%/,那么&#34; java packagefoo.MainClass&#34;将工作。 如果我将CLASSPATH设置为%CWD%/ packagefoo /,则无法找到packagefoo.MainClass。 始终&#34; java MainClass&#34;如果它是&#34; package&#34;的成员,则直到我删除java代码&#34; package packagefoo;&#34;并将类文件移动到目录中。

事实上,如果我改变&#34;包packagefoo;&#34; to&#34;包装foopackage;&#34;我必须在CLASSPATH / foopackage或foopackage下创建一个子文件夹.MainClass再次停止工作。

更糟糕的是,在PATH,CLASSPATH,JAVAHOME,Windows,JDeveloper,Oracle数据库以及它所安装的每个用户名之间,我认为编程器试图快速获取某些东西最终会破坏强制路径变量和结构,直到某些东西有效而不理解它意味着什么。

至少我做到了。

答案 12 :(得分:0)

创建一个文件夹org / tij / exercises,然后移动HelloWorld.java文件。然后在命令下运行

  var query = `
  select department_id, department_name from departments
  where 
    (department_id = :id_dep or :id_dep is null)
    and 
    (department_name = :name_dep or :name_dep is null)
  `;
  var binds = 
    {id_dep: req.body.id_dep
    ,name_dep: req.body.name_dep}
  ;

AND

javac -cp . org/tij/exercises/HelloWorld.java

答案 13 :(得分:0)

我使用IntelliJ创建了.jar,其中包括我库中一些未包装的jar。这些罐子之一在清单中有一些签名的东西,阻止了.jar的加载。没有警告或其他任何东西,只是行不通。 Could not find or load main class

删除装有清单的拆开的罐子,将其固定。

答案 14 :(得分:0)

我面临类似的问题,但这是由于文件目录中的空格字符保留了Java类。

下面给出的方案以及解决方案:

   public class Sample{
      public static void main(String[] args) {
        System.out.println("Hello world, Java");
      }
}
  • 我的Sample.java类保存在目录“ D:\ Java Programs \ Sample.java”中[注意:java类中不存在Package语句]。
  • 在命令提示符下,将目录更改为“ D:\ Java Programs \”,我的程序已编译,但是由于错误“找不到或加载主类”而无法运行
  • 在SOF上所有可能的解决方案都解决了之后(我什么都没做),我意识到空间可能会导致这个问题。
  • 令人惊讶的是删除了文件夹名称空间char ['Java Programs'->'JavaPrograms'],我的程序成功执行了。

    希望有帮助