반응형
Java 코드를 컴파일하고 실행하는 데 어려움을 겪고 있으며 Java를 VenSIM 용 공유 객체 인 Simulation Modeling 패키지로 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 코드에는 '메인'메소드가 포함되어 있으므로 문제가 무엇인지 확실하지 않습니다. 누구든지 나를 도와 줄 수 있습니까? 감사합니다.
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
파일의 위치를 추가해야합니다.따라서 현재 폴더에있는 경우 .
을 classpath에 추가하십시오.
Windows ClassPath Separator는 Semi-Colon, 즉 ;
입니다.
참조 페이지 https://stackoverflow.com/questions/7485670
반응형
'자바' 카테고리의 다른 글
SLF4J : 클래스 "org.slf4j.impl.StaticLoggerBinder"를로드하지 못했습니다. (0) | 2021.04.09 |
---|---|
문자열에서 마지막 문자를 제거하는 방법은 무엇입니까? (0) | 2021.04.09 |
Java의 정적 클래스 (0) | 2021.04.09 |
쉼표로 구분 된 문자열을 목록으로 변환하는 방법은 무엇입니까? (0) | 2021.04.09 |
java의 "instanceof"를 사용하십시오 (0) | 2021.04.08 |
댓글