「编译找不到java类」java编译后找不到或无法加载主类

博主:adminadmin 2023-03-22 06:24:06 664

今天给各位分享编译找不到java类的知识,其中也会对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编译后找不到或无法加载主类的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。