gpt4 book ai didi

java - java中的ClassNotFound异常

转载 作者:行者123 更新时间:2023-12-01 12:58:47 27 4
gpt4 key购买 nike

我有一个使用 joda-time-6.jar 的简单 Java 程序。我将此 jar 保留在 CLASSPATH 中,并且能够编译该程序。

但是当我尝试使用 java 命令从 .class 所在的同一目录运行它时,我得到 ClassNotFoundException 。

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));
}
}

最佳答案

javacjava 命令处理类路径的方式略有不同。具体来说,由于您将文件列表传递给 javac 进行编译,因此您只需包含编译器工作所需的库的位置即可。另一方面,java 希望您的类路径显式包含 . 以便在当前目录中运行类文件。

这是一个示例(在 Cygwin 中运行):

$ 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

请注意,您可以使用 '.;joda-time-2.2.jar' 作为两个命令的类路径,但只有后者才需要 . 。您可能还需要在类路径中使用 : 而不是 ;,请参阅 File.pathSeparatorChar如果您不确定,请了解更多信息。

您可以轻松地使用 CLASSPATH 变量,而不是 -cp 标志,但是 this is not recommended :

The preferred way to specify the class path is by using the -cp command line switch. This allows the CLASSPATH to be set individually for each application without affecting other applications. Setting the CLASSPATH can be tricky and should be performed with care.

关于java - java中的ClassNotFound异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23671340/

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