引物:
我下周将在加州大学圣地亚哥分校开设Java课程,我们的课本让我们下载了一个名为objectdraw.jar的库,我们将在前两章中使用它。我下载了库并将其放在java_libraries
目录中名为~/home/dev/
的文件夹中。
我正在尝试在Linux上运行我的Java程序,当我尝试运行它时出现错误。编译很好,但不会运行。
要进行编译,我将从TouchyWindow.java
文件所在的目录~/dev/java/
发出以下命令:
javac -classpath ../java_libraries/objectdraw.jar TouchyWindow.java
注意:它编译时没有错误或警告。
要运行该程序,我将从TouchWindow.class
文件所在的目录~/dev/java/
发出以下命令:
java -classpath ../java_libraries/objectdraw.jar TouchyWindow
当我尝试执行程序时,出现以下错误:
Exception in thread "main" java.lang.NoClassDefFoundError: /home/fhaddad78/dev/java/TouchyWindow
Caused by: java.lang.ClassNotFoundException: .home.fhaddad78.dev.java.TouchyWindow
at java.net...
at java.security...
at java.net...
at java.lang...
at sun.misc...
at java.lang...
Could not find the main class: /home/fhaddad78/dev/java/TouchyWindow. Program will exit.
关于我的系统:
我在Gentoo Linux上使用Iceatea Java SDK进行此操作。我提到这个是因为我不确定这是否会导致问题。
我是Java的新手,并不确定这意味着什么,因为它无法找到的文件位于它无法找到的路径中。
更新 为了帮助说明该程序,我将通过源代码,因为它只有几行。
// TouchyWindow.java
import objectdraw.*;
import java.awt.*;
public class TouchyWindow extends WindowController {
public void onMousePress(Location point) {
new Text("I'm Touched", 40, 50, canvas);
}
public void onMouseRelease(Location point) {
canvas.clear();
}
}
objectdraw.jar库文件处理源文件中可能缺少的任何内容。
更新 为了好奇,我启动了Windows,安装了Java SDK和Eclipse。创建了一个新项目,使用了与上面相同的代码,并且所有编译和工作都没有任何问题。这对问题有可能提供指导吗?
关于objectdraw.jar的更新
这可能是我的问题吗?
以下内容来自教科书的网站。
将objectdraw与应用程序而不是applet一起使用 有一种简单的方法可以将objectdraw与1.1版及更高版本的objectdraw库中的新应用程序一起使用。在这些版本的objectdraw下,您可以使用名为startController的新方法将WindowController(或Controller)的扩展作为应用程序运行。此方法包含在Controller类中(因此由WindowController继承)。
要将applet转换成也可以作为应用程序运行的程序,只需将以下方法添加到扩展Controller或WindowController的类中:
public static void main(String [] args){ new MyClassName()。startController(400,400); }
在上面,MyClassName是扩展Controller类的名称的占位符,而参数(400,400)指定了所需窗口的大小。
答案 0 :(得分:0)
您需要将.class文件退出的目录添加到类路径。
javac的输出转到目录,我们称之为BUILD_DIR。将此构建目录添加到类路径
java -classpath ../java_libraries/objectdraw.jar:$BUILD_DIR TouchyWindow
如果TouchWindow有一些包,则需要添加包开始的文件夹。在这种情况下,类名必须是packagename.packagename.ClassName
图书馆希望您使用applet。它说添加以下作为程序运行
public static void main(String[] args) {
new MyClassName().startController(400,400);
}
答案 1 :(得分:0)
.jar
文件(java将接受目录并自动归档所有.jar
个文件)试试这个:
java -cp ../java_libraries com.mypackage.TouchyWindow