我有一个程序,实现的功能是:SOCKET通信,接收文件->处理->发送响应信息。
做了一个可执行JAR包,但出现一下状况:能侦听,javaw也在运行,但就是不能顺利调用sms包(自己写的)中的类函数。然后在manifst.mf文件中加了一行:Class-path:sms.jar
可以调用了,但又出现了一个新问题:
这个路径把系统路径覆盖了,出现以下例外:
Make sure the file is in the CLASSPATH.  Extended error message: java.lang.NullPointerException
java.sql.SQLException:sms.jar在:C:\Program Files\Intel\iSMS\Java_Archives下面
系统类文件classes.zip在:C:\WINNT\Java\Classes下面
请问这个路径该怎么设置啊?谢谢!

解决方案 »

  1.   

    java -jar -classpath C:\Program Files\Intel\iSMS\Java_Archives\sms.jar;C:\WINNT\Java\Classes\classes.zip sms.jar
      

  2.   

    谢谢!可能我没说清楚我的意思。
    我是想修改MANIFEST.MF这个文件,然后让我的另一个JAR包(这个包调用SMS.JAR实现SOCKET通信)成为一个可执行的包。
    原来的MANIFEST.MF文件的内容如下:
    Manifest-Version: 1.0
    Class-path: sms.jar 
    Created-By: 1.4.2_04 (Sun Microsystems Inc.)
    Main-Class: Server
    可以调用SMS.JAR包中自定义的类,但不能调用SMS.JAR包中引用的系统类。我就是想改变这个CLASS-PATH让这个JAR文件能调用SMS.JAR包中引用的系统类。
    请各位不要怕麻烦,帮我看看好吗?确实是很急!
      

  3.   

    可执行的 JAR
    一个可执行的 jar 文件是一个自包含的 Java 应用程序,它存储在特别配置的JAR 文件中,可以由 JVM直接执行它而无需事先提取文件或者设置类路径。要运行存储在非可执行的 JAR中的应用程序,必须将它加入到您的类路径中,并用名字调用应用程序的主类。但是使用可执行的 JAR文件,我们可以不用提取它或者知道主要入口点就可以运行一个应用程序。可执行 JAR 有助于方便发布和执行 Java 应用程序。创建可执行 JAR
    创建一个可执行 JAR 很容易。首先将所有应用程序代码放到一个目录中。假设应用程序中的主类是com.mycompany.myapp.Sample。您要创建一个包含应用程序代码的 JAR文件并标识出主类。为此,在某个位置(不是在应用程序目录中)创建一个名为 manifest 的文件,并在其中加入以下一行:Main-Class: com.mycompany.myapp.Sample
    然后,像这样创建 JAR 文件:jar cmf manifest ExecutableJar.jar application-dir
    所要做的就是这些了 -- 现在可以用 java -jar 执行这个 JAR 文件 ExecutableJar.jar。一个可执行的 JAR 必须通过 menifest 文件的头引用它所需要的所有其他从属 JAR。如果使用了 -jar 选项,那么环境变量 CLASSPATH 和在命令行中指定的所有类路径都被 JVM 所忽略。启动可执行 JAR
    既然我们已经将自己的应用程序打包到了一个名为 ExecutableJar.jar 的可执行 JAR 中了,那么我们就可以用下面的命令直接从文件启动这个应用程序:java -jar ExecutableJar.jar包密封
    密封 JAR 文件中的一个包意味着在这个包中定义的所有类都必须在同一个 JAR 文件中找到。这使包的作者可以增强打包类之间的版本一致性。密封还提供了防止代码篡改的手段。要密封包,需要在 JAR 的 manifest 文件中为包添加一个 Name 头,然后加上值为“true”的 Sealed 头。与可执行的JAR 一样,可以在创建 JAR 时,通过指定一个具有适当头元素的 manifest 文件密封一个 JAR,如下所示:Name: com/samplePackage/
    Sealed: trueName头标识出包的相对路径名。它以一个“/”结束以与文件名区别。在 Name 头后面第一个空行之前的所有头都作用于在 Name头中指定的文件或者包。在上述例子中,因为 Sealed 头出现在 Name 头后并且中间没有空行,所以 Sealed 头将被解释为只应用到包com/samplePackage 上。如果试图从密封包所在的 JAR 文件以外的其他地方装载密封包中的一个类,那么 JVM 将抛出一个 SecurityException。扩展打包
    扩展为 Java 平台增加了功能,在 JAR 文件格式中已经加入了扩展机制。扩展机制使得 JAR 文件可以通过 manifest 文件中的 Class-Path 头指定所需要的其他 JAR 文件。假设 extension1.jar 和 extension2.jar 是同一个目录中的两个 JAR 文件,extension1.jar 的 manifest 文件包含以下头:Class-Path: extension2.jar这个头表明 extension2.jar 中的类是 extension1.jar 中的类的扩展类。extension1.jar 中的类可以调用 extension2.jar 中的类,并且不要求 extension2.jar 处在类路径中。在装载使用扩展机制的 JAR 时,JVM 会高效而自动地将在Class-Path 头中引用的 JAR 添加到类路径中。不过,扩展 JAR 路径被解释为相对路径,所以一般来说,扩展 JAR 必须存储在引用它的 JAR 所在的同一目录中。例如,假设类 ExtensionClient 引用了类 ExtensionDemo,它捆绑在一个名为 ExtensionClient.jar 的JAR 文件中,而类 ExtensionDemo 则捆绑在 ExtensionDemo.jar 中。为了使 ExtensionDemo.jar可以成为扩展,必须将 ExtensionDemo.jar 列在 ExtensionClient.jar 的 manifest 的Class-Path 头中,如下所示:Manifest-Version: 1.0
    Class-Path: ExtensionDemo.jar在这个 manifest 中 Class-Path 头的值是没有指定路径的 ExtensionDemo.jar,表明 ExtensionDemo.jar 与 ExtensionClient JAR 文件处在同一目录中。
      

  4.   

    谢谢onlyforlove,可我的问题就在这里:
    我是这样设的,但我指定的扩展类好像把系统类给覆盖了,就是说在扩展类里面调用的那些系统类不能正常使用。错误log信息如下:
    Tue Apr 26 15:34:39 PDT 2005  - Log for Firmware Upgrade Manager initiated!
    Tue Apr 26 15:34:39 PDT 2005 Error when read FUM property files: 
    java.lang.Exception: Can't read the FUM properties file: /fum.properties. Make sure the file is in the CLASSPATH.  Extended error message: java.lang.NullPointerException
    Tue Apr 26 15:34:39 PDT 2005 Error when read FUM property files: 
    java.lang.Exception: Can't read the FUM properties file: /fum.properties. Make sure the file is in the CLASSPATH.  Extended error message: java.lang.NullPointerException
    Tue Apr 26 15:34:39 PDT 2005 Error when read FUM property files: 
    java.lang.Exception: Can't read the FUM properties file: /fum.properties. Make sure the file is in the CLASSPATH.  Extended error message: java.lang.NullPointerException
    Tue Apr 26 15:34:39 PDT 2005 Error when read FUM property files: 
    java.lang.Exception: Can't read the FUM properties file: /fum.properties. Make sure the file is in the CLASSPATH.  Extended error message: java.lang.NullPointerException
    Tue Apr 26 15:34:39 PDT 2005 ================FUM Properties Settings=========
    UseCongestionControl: false
    MaxConcurrentUser: 80
    AvgDowloadTime: 50
    RestartDuration: 15
    Tue Apr 26 15:34:39 PDT 2005 New register request, IP: 192.168.1.200 Serial Number: 00:C3:C5:00:25:11
    Tue Apr 26 15:34:39 PDT 2005  - RegRecorder initiated, file name: StatusLog1114554879484_0.htm
    Tue Apr 26 15:34:39 PDT 2005 java.sql.SQLException: Couldn't Load Properties File ConnectionPoolManager::createNewPool ()
    at com.intel.sms.sql.DataAccess.getNewConnection(DataAccess.java)
    at com.intel.sms.sql.DataAccess.execParamQuery(DataAccess.java)
    at com.intel.fum.common.Processor.processFumReg(Processor.java)
    at com.intel.fum.common.Processor.queryUpgrade(Processor.java)
    at Server.run(Server.java)
    Tue Apr 26 15:34:39 PDT 2005 Failed to add a new DMG for MAC: 00:C3:C5:00:25:11
    Tue Apr 26 15:34:39 PDT 2005 java.lang.Exception: registerDmg: Unable to add new gateway account (AddGatewayAccount: 
    AddGatewayAccount GWAcException: 
    FindDefHWSW: SQLException: Couldn't Load Properties File ConnectionPoolManager::createNewPool ()).
    at com.intel.fum.common.DmgOpManager.registerDmg(DmgOpManager.java:81)
    at com.intel.fum.common.Processor.processFumReg(Processor.java)
    at com.intel.fum.common.Processor.queryUpgrade(Processor.java)
    at Server.run(Server.java)
    帮帮我啊!谢谢!
      

  5.   

    用servlet 实现connectionpool,有人用过吗?那些属性文件怎么导入的啊?