Java 错误:无法找到或加载主类
我在编译和运行我的Java代码时遇到了问题,该代码旨在允许我将Java与Vensim的共享对象(一个模拟建模包)连接起来 以下代码编译无误:Java 错误:无法找到或加载主类,java,linux,Java,Linux,我在编译和运行我的Java代码时遇到了问题,该代码旨在允许我将Java与Vensim的共享对象(一个模拟建模包)连接起来 以下代码编译无误: javac -d . -cp ./apache-log4j-1.2.16/log4j-1.2.16.jar:./vensim.jar SpatialModel.java VensimHelper.java VensimException.java VensimContextRepository.java 但是,当我尝试运行以下命令时: java
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
我得到以下错误:“错误:无法找到或加载主类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));
}
}
导入java.io.File;
导入java.text.NumberFormat;
导入java.util.ArrayList;
导入java.util.array;
导入java.util.List;
导入org.apache.log4j.Logger;
公共类空间模型{
私家车;
公共静态最终字符串DLL_LIBNAME_PARAM=“vensim_lib_nam”;
公共静态最终字符串MODEL_PATH_PARAM=“vensim_MODEL_PATH”;
私有最终静态int VENSIM\u上下文\u创建\u最大\u失败\u计数=10;
public SpatialModel()引发SpatialException{
字符串libName=System.getProperty(DLL\u libName\u PARAM);
字符串modelPath=System.getProperty(MODEL_PATH_PARAM);
if(libName==null | | libName.trim().equals(“”){
log.error(“Vensim库名称必须设置为-D”+DLL_LIBNAME_PARAM);
抛出新的SpatialException(“Vensim库名称必须设置为-D”+DLL_LIBNAME_PARAM);
}
if(modelPath==null | | modelPath.trim().equals(“”){
log.error(“模型路径必须设置为-D”+模型路径参数);
抛出新的SpatialException(“模型路径ahs设置为-D”+模型路径参数);
}
对于(int i=0;i0&&args[0].equals(“info”)){
System.out.println(新的VensimHelper(libName,modelPath.getVensimInfo());
}else如果(args.length>0&&args[0].equals(“vars”)){
VensimHelper=新的VensimHelper(libName,modelPath);
字符串[]vars=helper.getVariables();
for(字符串变量:vars){
System.out.println(helper.getVariableInfo(var));
}
}否则{
文件f=新文件(“.”);
System.out.println(f.getAbsolutePath());
SpatialModel sm=新的SpatialModel();
}
System.out.println(“执行时间:+(System.currentTimeMillis()-before));
}
}
我认为您需要将当前目录添加到Java类路径中
java -cp .:./apache-log4j-1.2.16/log4j-1.2.16.jar:./vensim.jar SpatialModel vars
必须确保将
.class
文件的位置添加到类路径中。因此,如果它在当前文件夹中,请将
添加到类路径中。
请注意,Windows类路径分隔符是分号,即
代码>问题与您的主要功能无关。查看
javac -d . -cp ./apache-log4j-1.2.16/log4j-1.2.16.jar:./vensim.jar SpatialModel.java VensimHelper.java VensimException.java VensimContextRepository.java
输出并运行它 如果您试图运行一个需要JDK1.6的java应用程序,并且您试图在JDK1.4上运行,您将遇到此错误。通常,尝试在旧JRE上运行Java应用程序可能会失败。尝试安装新的JRE/JDK。当出现以下错误时,可以尝试这两种方法:“找不到或加载主类”
如果您的类文件以HelloWorld
程序名保存在以下目录中
d:\sample
java-cpd:\sample HelloWorld
java-cp。HelloWorld
检查您的构建路径
,可能您正在引用一个不再存在的库。我知道这个问题是用linux标记的,但在windows上,您可能需要用分隔cp参数代码>而不是:
java-cp./apache-log4j-1.2.16/log4j-1.2.16.jar/vensim.jar空间模型变量
如果出现错误,必须设置类路径:
无法找到或加载主类XYZ
例如:
E:\>set path="c:\programfiles\Java\jdk1.7.0_17\bin"
E:\>set classpath=%classpath%;.;
E:\>javac XYZ.java
E:\>java XYZ
如果您在Eclipse中工作,只需对项目进行清理(project\clean..
clean all projects
)。我当时使用的是Java 1.8,当我在NetBeans中按下“Build and clean”时,这个错误突然发生。我短暂地再次切换到1.7,单击OK,重新打开properties并切换回1.8,一切都很顺利
我希望我能帮助一些人解决这个问题,因为这些错误可能非常耗时。这为我今天解决了这个问题:
cd /path/to/project
cd build
rm -r classes
然后清理并构建它,然后运行所需的各个文件。Project>清理,然后确保BuildPath>库具有正确的库。我在Windows中遇到了类似的问题,它与类路径有关。在命令行中,导航到Java文件(*.Java和*.class)所在的目录,然后使用命令重试。我遇到此错误是因为我试图运行
javac HelloWorld.java && java HelloWorld.class
当我应该删除.class
:
javac HelloWorld.java && java HelloWorld
您必须在javac和java命令中包含classpath
javac -cp . PackageName/*.java
java -cp . PackageName/ClassName_Having_main
假设你
$ cd src
$ javac -cp . com/test/*.java
$ java -cp . com/test/Hello
package thepackagename;
public class TheClassName {
public static final void main(String[] cmd_lineParams) {
System.out.println("Hello World!");
}
}
java -classpath . TheClassName
java -classpath . thepackagename.TheClassName
Error: Could not find or load main class mypackage.morepackage.myclass