Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 错误:无法找到或加载主类_Java_Linux - Fatal编程技术网

Java 错误:无法找到或加载主类

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

我在编译和运行我的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 -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