本帖最后由 dolonfly 于 2012-05-12 17:30:34 编辑

解决方案 »

  1.   

    建议加上当前路径,不要用相对路径:echo 当前盘符和路径:%~dp0或echo 当前CMD默认目录:%cd%这两个参数中的一个
      

  2.   

    加在 启动.bat 的第一行试试
      

  3.   

    FOR %%i IN ("lib\*.jar") DO CALL "setclasspath.bat" %%i改为:FOR %%i IN ("lib\*.jar") DO CALL "setclasspath.bat" %cd%\%%i
    然后注意看看:
    echo %CLASSPATH%
    的最终值
      

  4.   

    试了一下,还是不行。输出的classpath值是lib下面的全部文件(绝对路径),但还是提示找不到类。怀疑启动后并没有按照这个classpath走.
    F:\test>echo F:\test
    F:\test
    F:\test\lib\sqljdbc4.jar;F:\test\lib\mysql-connector-java-5.1.19-bin.jar;F:\test
    \lib\jsoup-1.6.1.jar;
    universal.Spider
    2012-5-12 20:03:41 spider.beans.DBBean initSqlServer
    严重: null
    java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver
            at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
            at java.security.AccessController.doPrivileged(Native Method)
            at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
            at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
            at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
            at java.lang.Class.forName0(Native Method)
            at java.lang.Class.forName(Class.java:169)
            at spider.beans.DBBean.initSqlServer(DBBean.java:33)
      

  5.   

    这就比较奇怪了,不过你既然已经用了CLASSPATH,启动Java时不需要再用 -cpjava -cp "%CLASSPATH%"  -jar -Xms256m -Xmx512m Spider-Frame.jar %*直接:java -jar -Xms256m -Xmx512m Spider-Frame.jar %*
    先尝试直接命令行执行看看吧。
      

  6.   

    似乎找到毛病了,但是不知道是为什么。我直接在程序启动时加入一行代码,让输出当前classpath,结果输出的没有达到预期的效果(只输出了spider-frame.jar,而没有输出lib下的东西)。也就是说classpath就没有设置进去。
    换了另一种方法,直接在程序启动的时候,加入一行代码:
    System.setProperty("java.class.path", ".;F:\\test\\lib\\sqljdbc4.jar;");
    这样就行了。
    上面两种方法,只有第二种能成功,不知道是第一种的批处理写错了还是怎么的。第二种成功。所以目前来说可以写一个函数来初始时返回lib文件夹下的所有文件的字符串表示,然后设置成java.class.path
    不过这个问题还应继续关注。
      

  7.   

    错了,这个有成功的假象是应为我直接在manifest里面配置了。去掉后还是不行的