java中的ClassNotFound异常
我有一个简单的Java程序,它使用joda-time-6.jar”,我将这个jar保存在类路径中,我能够编译这个程序 但当我尝试从.class所在的同一目录中使用java命令运行它时,我得到了ClassNotFoundExceptionjava中的ClassNotFound异常,java,Java,我有一个简单的Java程序,它使用joda-time-6.jar”,我将这个jar保存在类路径中,我能够编译这个程序 但当我尝试从.class所在的同一目录中使用java命令运行它时,我得到了ClassNotFoundException Exception in thread "main" java.lang.NoClassDefFoundError: Fmo/class Caused by: java.lang.ClassNotFoundException: Fmo.class
Exception in thread "main" java.lang.NoClassDefFoundError: Fmo/class
Caused by: java.lang.ClassNotFoundException: Fmo.class
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
Could not find the main class: Fmo.class. Program will exit
有人能指出吗
import org.joda.time.LocalDate;
import org.joda.time.*;
public class Fmo {
public static LocalDate getNthSundayOfMonth(final int n, final int month, final int year) {
final LocalDate firstSunday = new LocalDate(year, month, 1).withDayOfWeek(DateTimeConstants.SUNDAY);
if (n > 1) {
final LocalDate nThSunday = firstSunday.plusWeeks(n - 1);
final LocalDate lastDayInMonth = firstSunday.dayOfMonth().withMaximumValue();
if (nThSunday.isAfter(lastDayInMonth)) {
throw new IllegalArgumentException("There is no " + n + "th Sunday in this month!");
}
return nThSunday;
}
return firstSunday;
}
public static void main(final String[] args) {
System.out.println(getNthSundayOfMonth(1, DateTimeConstants.MAY, 2014));
System.out.println(getNthSundayOfMonth(2, DateTimeConstants.MAY, 2014));
System.out.println(getNthSundayOfMonth(3, DateTimeConstants.MAY, 2014));
System.out.println(getNthSundayOfMonth(4, DateTimeConstants.MAY, 2014));
System.out.println(getNthSundayOfMonth(5, DateTimeConstants.MAY, 2014));
}
}
javac
和java
命令处理类路径的方式略有不同。特别是,由于要编译,您需要将文件列表传递给javac
,因此只需要包含位置编译器工作所需的库。另一方面,java
希望类路径显式包含
,以便在当前目录中运行类文件
下面是一个示例(在Cygwin中运行):
请注意,您可以使用;joda-time-2.2.jar'
作为这两个命令的类路径,但只有后者才需要,
。您可能还需要在类路径中使用:
而不是;
,如果您不确定,请参阅了解更多信息
您可以同样轻松地使用CLASSPATH
变量,而不是-cp
标志,但是:
指定类路径的首选方法是使用-cp命令行开关。这允许在不影响其他应用程序的情况下为每个应用程序单独设置类路径。设置类路径可能很棘手,应小心执行
导出它?你没有理解。你能详细说明一下吗。我的类路径中有一个jar显示你如何运行这个java程序?类路径是否完整并作为参数传递给java?你是在某种IDE中开发的吗?这意味着编译路径中不存在
Fmo.class
。我通过java Fmo运行它。我的类路径只包含jodatime的jar路径。不,我没有使用任何IDE开发它。我可以按照您提到的方式进行编译。但是当我使用java-cp时,“;joda time jar”JodaTest我仍然会得到ClassNotFound异常。
$ ls
JodaTest.java joda-time-2.2.jar
$ cat JodaTest.java
import org.joda.time.LocalDate;
public class JodaTest {
public static void main(String[] args) {
System.out.println(new LocalDate());
}
}
$ javac -cp joda-time-2.2.jar JodaTest.java
$ java -cp '.;joda-time-2.2.jar' JodaTest
2014-05-15