错误:无法find或加载主类

我无法编译和运行我的Java代码,目的是为了让我能够将Java与Vensim(一个仿真build模包)的共享对象连接起来。

下面的代码编译没有错误:

javac -d . -cp ./apache-log4j-1.2.16/log4j-1.2.16.jar:./vensim.jar SpatialModel.java VensimHelper.java VensimException.java VensimContextRepository.java 

但是,当我尝试运行以下:

 java -cp ./apache-log4j-1.2.16/log4j-1.2.16.jar:./vensim.jar SpatialModel vars 

我得到以下错误:“错误:无法find或加载主类SpatialModel”。 我的SpatialModel.java代码确实包含了一个'main'方法(下面),所以我不确定这个问题是什么 – 任何人都可以帮我一下吗? 谢谢。

 import java.io.File; import java.text.NumberFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.apache.log4j.Logger; public class SpatialModel { private VensimHelper vh; public static final String DLL_LIBNAME_PARAM = "vensim_lib_nam"; public static final String MODEL_PATH_PARAM = "vensim_model_path"; private final static int VENSIM_CONTEXT_CREATION_MAX_FAILURE_COUNT = 10; public SpatialModel() throws SpatialException { String libName = System.getProperty(DLL_LIBNAME_PARAM); String modelPath = System.getProperty(MODEL_PATH_PARAM); if(libName == null || libName.trim().equals("")) { log.error("Vensim library name has to be set with -D" + DLL_LIBNAME_PARAM); throw new SpatialException("Vensim library name has to be set with -D" + DLL_LIBNAME_PARAM); } if(modelPath == null || modelPath.trim().equals("")) { log.error("Model path has to set with -D" + MODEL_PATH_PARAM); throw new SpatialException("Model path ahs to be set with -D" + MODEL_PATH_PARAM); } for (int i = 0; i < VENSIM_CONTEXT_CREATION_MAX_FAILURE_COUNT && vh == null; i++) { try { log.info("creating new vensim helper\n\tdll lib: " + libName + "\n\tmodel path: " + modelPath); vh = new VensimHelper(libName, modelPath); } catch (Throwable e) { log.error("An exception was thrown when initializing Vensim, try: " + i, e); } } if (vh == null) { throw new SpatialException("Can't initialize Vensim"); } } public static void main(String[] args) throws VensimException { long before = System.currentTimeMillis(); String libName = System.getProperty(DLL_LIBNAME_PARAM); String modelPath = System.getProperty(MODEL_PATH_PARAM); if (libName == null) { libName = "libvensim"; } if(modelPath == null) { modelPath = "~/BassModel.vmf"; } System.setProperty(DLL_LIBNAME_PARAM, libName); System.setProperty(MODEL_PATH_PARAM, modelPath); if (args.length > 0 && args[0].equals("info")) { System.out.println(new VensimHelper(libName, modelPath).getVensimInfo()); } else if (args.length > 0 && args[0].equals("vars")) { VensimHelper helper = new VensimHelper(libName, modelPath); String[] vars = helper.getVariables(); for (String var : vars) { System.out.println(helper.getVariableInfo(var)); } } else { File f = new File("."); System.out.println(f.getAbsolutePath()); SpatialModel sm = new SpatialModel(); } System.out.println("Execution time: " + (System.currentTimeMillis() - before)); } } 

您必须确保将您的.class文件的位置添加到您的类path中。 所以,如果它在当前文件夹中,然后添加. 到你的类path。 请注意,Windows类path分隔符是一个分号,即;

如果class级在一个包里

 package thepackagename; public class TheClassName { public static final void main(String[] cmd_lineParams) { System.out.println("Hello World!"); } } 

然后打电话:

 java -classpath . TheClassName 

导致Error: Could not find or load main class TheClassName 。 这是因为它必须以完全合格的名称来调用:

 java -classpath . thepackagename.TheClassName 

这个thepackagename目录必须存在于类path中。 在这个例子中. ,即当前目录,是整个类path。 因此,必须从包名称所在的目录中调用此特定示例。

要清楚的是,这个类的名称不是TheClassName ,它是thepackagename.TheClassName的名称。类名。 尝试执行TheClassName不起作用,因为没有具有该名称的类存在 。 不pipe在当前的classpath中。

最后,请注意编译( .class)版本被执行,而不是源代码( .java)版本。 因此,“CLASSPATH”。

你可以尝试这两个,当你得到的错误:'无法find或加载主类'

如果您的类文件保存在HelloWorld程序名称d:\sample以下目录中

  1. java -cp d:\sample HelloWorld
  2. java -cp . HelloWorld

我相信你需要将当前目录添加到Java类path中

 java -cp .:./apache-log4j-1.2.16/log4j-1.2.16.jar:./vensim.jar SpatialModel vars 

你必须包括classpath到你的javac和java命令

 javac -cp . PackageName/*.java java -cp . PackageName/ClassName_Having_main 

假设你有以下几点

包名:com.test类名:Hello(拥有主)文件位于“src / com / test / Hello.java”

从外部目录:

 $ cd src $ javac -cp . com/test/*.java $ java -cp . com/test/Hello 
  • 在Windows中,同样的事情也会起作用,我已经尝试过了

如果你在Eclipse中工作,只需要清理( project\clean.. clean all projects )的项目。

如果出现错误,您必须设置类path:

无法find或加载主类XYZ

例如:

 E:\>set path="c:\programfiles\Java\jdk1.7.0_17\bin" E:\>set classpath=%classpath%;.; E:\>javac XYZ.java E:\>java XYZ 

我得到这个错误,因为我试图运行

 javac HelloWorld.java&&java HelloWorld.class 

当我应该删除.class

 javac HelloWorld.java&&java HelloWorld 

检查你的BuildPath,这可能是你正在引用一个不存在的库。

我知道这个问题被标记为Linux,但在Windows上 ,你可能需要分开你的CP参数与; 而不是:

java -cp ./apache-log4j-1.2.16/log4j-1.2.16.jar;./vensim.jar SpatialModel vars

http://docs.oracle.com/javase/7/docs/technotes/tools/windows/classpath.html

如果您尝试运行需要JDK 1.6的Java应用程序,并且您尝试在JDK 1.4上运行,那么您将遇到此错误。 一般来说,尝试在旧的JRE上运行java appliation可能会失败。 尝试安装新的JRE / JDK

如果你得到这个错误,并且你正在使用Maven来构build你的Jars ,那么很可能你在src/main/java/没有你的Java类。

在我的情况下,我在Eclipse中创build了我的项目,默认为src (而不是src/main/java/

所以我结束了像mypackage.morepackage.myclass和目录结构看起来像src/mypackage/morepackage/myclass ,这本质上没有任何错误。 但是当你运行mvn clean install它会查找src/main/java/mypackage/morepackage/myclass 。 它不会find类,但它也不会错误。 所以它会成功地构build,当你运行你输出的Jar时,结果是:

 Error: Could not find or load main class mypackage.morepackage.myclass 

因为它根本不包括你的类在打包的jar子里。

项目>清理,然后确保BuildPath>库具有正确的库。

java -verbose:class HelloWorld可以帮助你理解哪些类正在被加载。

另外,如前所述,请记住调用完全限定的名称(即包括包)。

问题不在于你的主要function。 退房

 javac -d . -cp ./apache-log4j-1.2.16/log4j-1.2.16.jar:./vensim.jar SpatialModel.java VensimHelper.java VensimException.java VensimContextRepository.java 

输出并运行它。

我正在使用Java 1.8,并且当我在netbeans中按下“Build and clean”时突然出现这个错误,我再次切换到1.7,点击OK,重新打开属性并切换回1.8,一切正常。

我希望我可以帮助这个人,这些错误可能会相当耗时。

当我将一个现有的项目导入到eclipse中时,发生了这个问题。 它会复制所有不在包中的文件,而是在包之外。 因此,当我尝试运行>运行configuration时,找不到主要方法,因为它不在包中。 我所做的只是将文件复制到软件包中,然后Eclipse能够检测到主要方法。 所以最终确保Eclipse可以find你的主要方法,确保你的java文件在正确的包中。

如果你正在使用Eclipse …我重命名我的主类文件,并得到该错误。 我去了“Run As”configuration器,并在该项目的类path下,它已经列出了类path中的两个文件。 我删除了旧的类,我重命名,离开了新名称的类,它编译和运行得很好。

如果比许多人想象的那么简单,我包括:)

CD到Project Folder/src/package那里你应该看到yourclass.java然后运行javac yourClass.java这将创buildyourClass.class然后cd出src文件夹,并进入生成文件夹那里你可以运行java package.youClass

我正在使用Mac上的terminal,或者您可以使用Windows上的命令提示符完成相同的任务

这为我今天解决了这个问题:

 cd /path/to/project cd build rm -r classes 

然后清理并构build它并运行您需要的单个文件。

我在Windows中有一个类似的问题,它与类path有关。 从命令行导航到Java文件(* .java和* .class)所在的目录,然后再次尝试使用命令。

我使用Anypoint Studio(基于Eclipse的IDE)。 在我的情况下,一切运行良好,直到我发现在运行Java代码时,执行完全不同的东西。 然后我删除了.class文件。 在这之后,我从这个问题的标题中得到错误信息。 清理项目并没有解决问题。

重新启动IDE后,再次运行良好。