【发布时间】:2020-12-30 17:09:03
【问题描述】:
我用chdir()切换目录,然后用execvp()执行“java Main”。我确定有 Main.class,但是出了点问题。我想知道为什么。
#include <cstdio>
#include <unistd.h>
using namespace std;
int main(){
char buf[80];
getcwd(buf,sizeof(buf));
printf("current working directory: %s\n", buf);
chdir("/home/keane/Judge/temp");
getcwd(buf,sizeof(buf));
printf("current working directory: %s\n", buf);
char *array[3];
array[0] = "java";
array[1] = "Main";
array[2] = NULL;
execvp("java", array);
return 0;
}
错误是 could not find the main class ,我可以在该目录中运行 java Main。
让我抓狂的是我不能使用system("java Main"),而错误是Error: Could not find or load main class Main,而且在我的电脑上就是这样
更新:
#include <unistd.h>
#include <cstdlib>
int main(){
chdir("/home/keane/Judge/temp");
system("pwd");
system("ls");
system("java Main");
return 0;
}
控制台的输出是:
/home/keane/Judge/temp
1.out 3.out 5.out Main.class stdout_spj.txt
2.out 4.out ce.txt Main.java
Error: Could not find or load the main class Main
我的最终解决方案是重新启动计算机并将-cp . 添加到 java 命令。
虽然我不知道为什么是必要的。
谢谢大家!
【问题讨论】:
-
难道
java不应该得到一个包含Main类的.jar文件吗?我不是Java专家,所以如果我不确切知道,请忽略我的无知。但也请把错误信息也放在你的问题中,否则很难诊断出每个人的情况。 -
@πάνταῥεῖ 不,
java Main将运行main方法的Main.class包含完全限定的类名Main -
@AnttiHaapala .jar 或默认取自哪里?
-
@πάνταῥεῖ 没有“默认罐子”......无论如何。
Main.class需要是该目录中的文件。javac Main.java; java Main -
您也可以尝试添加 Peter 建议的
-cp .,尽管没有类似的方法一直对我有用。