「编译找不到java类」java编译后找不到或无法加载主类
今天给各位分享编译找不到java类的知识,其中也会对java编译后找不到或无法加载主类进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、javac编译找不到import
- 2、java程序编译通过但是运行时显示“找不到或无法加载主类 helloworld ” ,怎么解决?
- 3、求解 java动态编译找不到类,往各位大虾指导
- 4、编译成功 Java 提示找不到或无法加载主类
javac编译找不到import
1、首先通过“cd”命令切换到java类的存放路径。
2、其次重新确认java类中的代码编写是否正确。
3、最后输入javac类名.java,回车,执行运行,如果不报错说明编译正常,如果报错,根据错误修改java类代码即可。
java程序编译通过但是运行时显示“找不到或无法加载主类 helloworld ” ,怎么解决?
既然javac编译已经通过,这说明变量java-home已经配置的没有问题了。
(java-home对应的变量值为javac.exe所在的路径;一般是在安装路径下,例如c:\Program Files\Java\jdk1.7.0_45\bin)。
那第一种可能就是:问题就出在Path变量对应的变量值上或者是新建用户变量classpath上有问题,你重新配置一下。Path对应的变量值是在原来的变量值前面加上%Java_Home%。
第二种可能就是:你的环境变量都是正确的,只是你编译的java源文件中,主函数public static void main(String args[]){}没有写在main这个类中。
一个java源文件可以写很多类,编译的时候javac源文件之后,每个类生成一个class文件。你去运行的时候,并不一定是去java源文件名,而是去java主函数所在的那个类名。
第三种可能就是:像intopass说的那样,你在eclipse写的时候里面会有package,你把它删掉试试。
求解 java动态编译找不到类,往各位大虾指导
参照网上其他童鞋的例子与介绍,修改了一下:
import java.io.IOException;
import java.lang.reflect.Method;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Arrays;
import javax.tools.JavaCompiler;
import javax.tools.JavaCompiler.CompilationTask;
import javax.tools.JavaFileObject;
import javax.tools.SimpleJavaFileObject;
import javax.tools.StandardJavaFileManager;
import javax.tools.ToolProvider;
/**
* 动态编译Java 源文件
*
* @author shenshouer
*
*/
public class CompilerTest {
public static void main(String[] args) throws Exception {
String source = "public class Main { " + "public static void main(String[]args) {"
+ "System.out.println(\"Hello World!\");" + "} " + "}";
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null);
StringSourceJavaObject sourceObject = new CompilerTest.StringSourceJavaObject("Main",
source);
Iterable? extends JavaFileObject fileObjects = Arrays.asList(sourceObject);
// 获取编译类根路径,不然会报找不到类的错误
String path = Class.class.getClass().getResource("/").getPath();
Iterable String options = Arrays.asList("-d", path);
// 增加options参数
// CompilationTask task = compiler.getTask(null, fileManager, null, null, null, fileObjects);
CompilationTask task = compiler.getTask(null, fileManager, null, options, null, fileObjects);
boolean result = task.call();
if (result) {
System.out.println("编译成功。");
ClassLoader loader = CompilerTest.class.getClassLoader();
try {
Class? clazz = loader.loadClass("Main");
Method method = clazz.getMethod("main", String[].class);
// 修改调用参数,不然会报参数个数不对
// Object value = method.invoke(null, new Object[] {});
Object value = method.invoke(null, new Object[] {new String[]{}});
System.out.println(value);
} catch (Exception e) {
e.printStackTrace();
}
}
}
static class StringSourceJavaObject extends SimpleJavaFileObject {
private String content = null;
public StringSourceJavaObject(String name, String content) throws URISyntaxException {
super(URI.create("string:///" + name.replace('.', '/') + Kind.SOURCE.extension),
Kind.SOURCE);
this.content = content;
}
public CharSequence getCharContent(boolean ignoreEncodingErrors) throws IOException {
return content;
}
}
}
编译成功 Java 提示找不到或无法加载主类
这个问题分析如下
一、java执行class文件是根据CLASSPATH指定的地方来找,不是我们理解当前目录。如果希望它查询当前目录,需要在CLASSPATH中加入“.;”,代表当前目录。所以,如果是这个问题你的方案是在 classpath中 加上 .; 如图:
二、java执行class文件对package的路径是强依赖的。它在执行的时候会严格以当前用户路径为基础,按照package指定的包路径转化为文件路径去搜索class文件。各位同学以后注意就OK啦。至于网上说的要在CLASSPATH要加各种包等等都是泛泛而谈,真正静下心分析这个问题的资料不多。很多都没有说到点子上,会误导人的。如图:
关于编译找不到java类和java编译后找不到或无法加载主类的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。