1

底漆:

下周我将在 UCSD 开始一个 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.

关于我的系统:

我正在使用 Iceatea Java SDK 在 Gentoo Linux 上执行此操作。我提到这一点是因为我不确定这是否会导致问题。

我是 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 用于应用程序,该方法是 objectdraw 库 1.1 版和更高版本中新增的。在这些版本的 objectdraw 下,您可以使用名为 startController 的新方法将 WindowController(或 Controller)的扩展作为应用程序运行。此方法包含在 Controller 类中(因此由 WindowController 继承)。

要将本来是 applet 的程序转变为可以作为应用程序运行的程序,只需将以下方法添加到扩展 Controller 或 WindowController 的类中:

public static void main(String[] args) { new MyClassName().startController(400,400); }

在上面,MyClassName 是扩展 Controller 的类名称的占位符,而参数 (400,400) 指定所需的窗口大小。

4

2 回答 2

0

您需要将 .class 文件所在的目录添加到类路径中。

javac 的输出进入一个目录,我们称之为BUILD_DIR。将此构建目录添加到类路径

java -classpath ../java_libraries/objectdraw.jar:$BUILD_DIR TouchyWindow

如果 TouchWindow 有一些包,您需要添加包开始的文件夹。在这种情况下,类名必须是 packagename.packagename.ClassName

该库希望您使用小程序。它说添加以下以作为程序运行

public static void main(String[] args) { 
   new MyClassName().startController(400,400); 
} 
于 2012-09-22T02:27:28.767 回答
0
  1. 从你的类路径中删除.jar文件(java将接受目录并.jar自动将所有文件归档)
  2. 完全限定您的类 - 没有包,java 将假定它位于顶层(即没有包)

试试这个:

java -cp ../java_libraries com.mypackage.TouchyWindow
于 2012-09-22T02:30:51.530 回答