2

下载了最新的 Java SE。通过 JNLP 在http://docs.oracle.com/javase/tutorial/uiswing/components/filechooser.html运行 FileChooserDemo 工作正常。(窗口框。)

从http://docs.oracle.com/javase/tutorial/uiswing/examples/components/index.html#JWSFileChooserDemo下载源代码

按照java源代码中的编译说明:

C:components> javac -classpath .;jars/jnlp.jar JWSFileChooserDemo.java 

这工作正常。在 components 目录中生成了两个类文件。然后...

C:components>cd .. 
C:src> java -classpath .;jars/jnlp.jar components.JWSFileChooserDemo 
Exception in thread "main" java.lang.NoClassDefFoundError:javax/jnlp/UnavailableServiceException 
at java.lang.Class.getDeclaredMethods0(Native Method) 
. 
. 
. 

所以UnavailableServiceException.class没有找到。但是,如果您列出 jar 文件,则该类就在那里。所以我的类路径是错误的。

C:jars> tar tf jnlp.jar
META-INF/
META-INF/MANIFEST.MF
javax/jnlp/
javax/jnlp/BasicService.class
javax/jnlp/ClipboardService.class
javax/jnlp/DownloadService.class
javax/jnlp/DownloadServiceListener.class
javax/jnlp/ExtensionInstallerService.class
javax/jnlp/FileContents.class
javax/jnlp/FileOpenService.class
javax/jnlp/FileSaveService.class
javax/jnlp/JNLPRandomAccessFile.class
javax/jnlp/PersistenceService.class
javax/jnlp/PrintService.class
javax/jnlp/ServiceManager.class
javax/jnlp/ServiceManagerStub.class
javax/jnlp/UnavailableServiceException.class

我在 Mac OSX 上试过这个(你必须在类路径中将分号更改为冒号)和同样的事情。

更新:我在网上找到了这个演示的旧版本,它不能UnavailableSewrviceException独立使用和编译。它适用于当前的 Java 并适合我的目的。我仍然不明白为什么上面给出的命令不起作用。

4

1 回答 1

1

按着这些次序 :

说我这边的目录结构是这样的,在C Drive


  components-JWSFileChooserDemoProject
                  |
  ------------------------------------
  |           |           |          |
nbproject    src      build.xml    manifest.mf
              |
          components
              |
  -------------------------------------------------
  |       |       |                               |
images   jars     |                               |
             JWSFileChooserDemo.java      JWSFileChooserDemo.jnlp

components Directory创建一个新的Directory名称下build,所以现在Directory - components将有五个东西,而不是四个,即buildimages、和。jarsJWSFileChooserDemo.javaJWSFileChooserDemo.jnlp

现在先去components Directory

要编译写这个命令:

C:\components-JWSFileChooserDemoProject\src\components>javac -classpath images\*;jars\*;build -d build JWSFileChooserDemo.java

在选项内部-classpath,您指定Directories images,jars和的内容build将在编译时包含在内JWSFileChooserDemo.java-d选项基本上告诉了放置.class文件的位置。

移动到"build"文件夹:

C:\components-JWSFileChooserDemoProject\src\components>cd build

运行程序:

C:\components-JWSFileChooserDemoProject\src\components\build>java -cp .;..\images\*;..\jars\* components.JWSFileChooserDemo

这里的 inside-cp选项.表示,从当前位置看,..\images\*意味着从当前位置向上一层images Directory,并获取其所有内容,同样适用于..\jars\*thingy。

现在您将看到它正在工作,并给出以下输出:

JWSFILECHOOSERDEMOIMAGE


编辑 1:

-d由于您想在没有Java Compiler - javac. 考虑到与以前相同的目录结构,将其移入您的components Directory.

用这个命令编译:

C:\components-JWSFileChooserDemoProject\src\components>javac -classpath images\*;jars\* JWSFileChooserDemo.java

package structure现在在 中手动创建File System,即创建Directory components然后移动.class之前创建的文件,在这个新创建的内部components Directory,并将images文件夹添加到这个新创建的components文件夹中。

现在Directory - components将有五个东西,而不是四个,即components(which further contains JWSFileChooserDemo.class , JWSFileChooserDemo$1.class and images folder)images、和。jarsJWSFileChooserDemo.javaJWSFileChooserDemo.jnlp

使用以下命令运行程序:

C:\components-JWSFileChooserDemoProject\src\components>java -cp .;jars\* components.JWSFileChooserDemo

这将为您提供先前的输出,但是,如果您想按照之前的建议移动,请再次将images文件夹复制到自动生成的components文件夹中,因为我只是查看了内部.java并且他们使用relative path它来工作。


只是这个特殊的解决方案,我将要描述的将仅适用于您的情况:

如果在javac之前给出的命令之后,如果您不想创建任何文件夹,则上一层,即在组件目录之外并使用此命令运行程序

C:\components-JWSFileChooserDemoProject\src>java -cp .;components\jars\* components.JWSFileChooserDemo

如果你不想

于 2013-07-19T11:54:45.867 回答