尝试使用objectdraw运行java程序时,线程“主”错误中的异常

时间:2012-09-22 02:14:33

标签: java javac

引物:

我下周将在加州大学圣地亚哥分校开设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)指定了所需窗口的大小。

2 个答案:

答案 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)

  1. 从类路径中取消.jar文件(java将接受目录并自动归档所有.jar个文件)
  2. 完全符合您的课程资格 - 如果没有软件包,java会认为它位于顶层(即没有软件包)
  3. 试试这个:

    java -cp ../java_libraries com.mypackage.TouchyWindow