gpt4 book ai didi

java - ClassNotFoundException 问题; linux相关问题(学校项目)

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:22:22 25 4
gpt4 key购买 nike

我现在正在为我的编程类(class)开发一个文本编辑器项目,当我尝试运行它时遇到了一个以前从未见过的错误。这是一个相当长的解释,但基本上,我正在使用一个编辑器类,该类使用其他几个类来创建一个链表,在其中存储一个文本文件,然后允许修改该文件。我应该在 linux 环境中运行它,并且有问题的文件应该作为“命令行”参数输入。但是,每次尝试运行它时,我都会收到以下错误

Exception in thread "main" java.lang.NoClassDefFoundError: myEditor
Caused by: java.lang.ClassNotFoundException: myEditor
at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
Could not find the main class: myEditor. Program will exit.

至于程序本身:

import java.util.Scanner;
import java.util.Iterator;
import java.io.*;

public class myEditor {

public static void saveToFile(String text, String filename) throws IOException{
PrintWriter out = new PrintWriter(new File(filename));
out.println(text);
out.close();
}

public static void main(String args[]) {
boolean quit = false;
try {
if(args.length!=1) {
throw new IllegalArgumentException();
}

String filename = args[0];
Scanner input = new Scanner(new File(filename));
//Add exception
UnorderedList<String> list = new UnorderedList<String>();
while(input.hasNextLine()) {
if(list.head==null) {
list.addToFront(input.nextLine());
}
list.addToRear(input.nextLine());
}

System.out.println(">");

do {
Scanner command = new Scanner(System.in);
String comm = command.next();
String[] comm1 = comm.split(" ");

if(comm1[0].equalsIgnoreCase("I")&&comm1[1].equals("")) {
System.out.println("Type a line of text >");
comm = command.next();
list.addToRear(comm);
}

else if(comm1[0].equalsIgnoreCase("I")&&!comm1[1].equals("")) {
int linNum = Integer.parseInt(comm1[1]);
Iterator<String> itr = list.iterator();
String current = "";
for(int count=0;count<linNum;count++) {
current = itr.next();
}
list.addAfter(comm, current);
}

else if(comm1[0].equalsIgnoreCase("D")&&!comm1[1].equals("")) {
int linNum = Integer.parseInt(comm1[1]);
if(linNum<=list.count&&linNum>0) {
Iterator<String> itr = list.iterator();
String current = "";
for(int count=0;count<linNum;count++) {
current = itr.next();
}
list.remove(current);
}
}

else if(comm1[0].equalsIgnoreCase("L")) {
list.toString();
}

else if(comm1[0].equalsIgnoreCase("E")&&!comm1[1].equals("")) {
saveToFile(list.toString(), filename);
quit = true;
break;
}
}
while(!quit);
}
catch(IllegalArgumentException e) {
System.err.print(e.getMessage());
}
catch(FileNotFoundException e) {
System.err.print(e.getMessage());
}

catch(IOException e) {
System.err.print(e.getMessage());
}

}
}

显然,我在这个类中使用了很多其他类,但在我看来错误并不在于它们。有没有人对这种错误有任何经验?

编辑:我差点忘了提到,通过命令行参数,我的意思是应该使用的文件应该已经在放置它的 linux 目录中。它显然应该占用 args[0]

最佳答案

java.lang.classNotFoundException 出现在以下情况:

1) 当我们尝试使用 Class.forName() 方法加载类时,.class 文件或类的二进制文件在类路径中不可用。

2) 当 Classloader 尝试使用 findSystemClass() 方法加载类时。

3) 在 Java 中使用类 ClassLoader 的 loadClass() 方法时。

很明显,jvm 无法找到您的类。现在的问题是谁会告诉 jvm 去哪里找类?答案是——CLASSPATH 环境变量。

因为类路径是一个参数(在命令行上设置或通过环境变量设置),它告诉 Java 虚拟机或 Java 编译器到哪里寻找用户定义的类和包。

因此您可以在运行时设置 CLASSPATH "java $CLASSPATH:. myEditor" 或在环境中一如既往地查找当前目录,这将解决问题。

在 linux 变体上,您可以在 .bashrc 文件中设置它(如果使用 bash),可以使用 set 命令,可以在 .bash_profile 中设置。在 Windows 上,您会在“系统-->属性”中找到相同的内容

关于java - ClassNotFoundException 问题; linux相关问题(学校项目),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19393752/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com