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

时间:2013-10-16 01:21:31

标签: java linux exception classnotfoundexception

我正在为我的编程类正在编写一个文本编辑器项目,并且当我尝试运行它时,我遇到了一个我从未见过的错误。这是一个相当长的解释,但基本上,我使用的编辑器类使用其他几个类来创建链表,在其中存储文本文件,然后允许修改文件。我应该在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]

3 个答案:

答案 0 :(得分:2)

java.lang.classNotFoundException有以下几种情况:

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

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

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

很明显,jvm无法找到你的班级。现在的问题是谁会告诉jvm在哪里寻找一个班级?答案是--CLASSPATH环境变量。

因为Classpath是命令行上的参数集,或者是通过环境变量 - 告诉Java虚拟机或Java编译器在哪里查找用户定义的类和包。

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

在linux变种上你可以在.bashrc文件中设置它(如果使用bash),可以使用set命令,可以设置为.bash_profile。在Windows上,您可以在“系统 - &gt;属性”

中找到相同的内容

答案 1 :(得分:0)

错误是说它无法在运行时找到类myEditor 但是在编译时出现了。在我的测试中,当我运行课程并且我遗漏了某些内容时,它会给我一个确切的错误。您的所有课程都在同一个地方(或组织得当)吗?尝试查看所需的所有.class文件,并确保它们都在那里。如果您提供有关如何编译和运行此内容的更多详细信息,我可以编辑此答案以便为您提供更好的答案!

答案 2 :(得分:0)

  1. 确保您已通过 javac

  2. 编译了您的课程
  3. 请使用类路径执行命令,例如

    java $ CLASSPATH:的MyEditor