我正在使用JCIFS(http://jcifs.samba.org/)。我的代码很简单,并取自Login.java示例:

import jcifs.*;
import jcifs.smb.*;

public class netp {
    public static void main( String argv[] ) throws Exception {
     System.out.println("START");

     String ip = "10.0.0.1";
     String domain = "domain";
     String user = "user";
     String pass = "pass";

    UniAddress dc = UniAddress.getByName( ip );
    NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication( domain + ";" + user + ":" + pass );
    SmbSession.logon( dc, auth );

     System.out.println("END");

     return;
    }
}

如果我这样做,则编译此工程:
javac -cp jcifs-krb5-1.3.17.jar netp.java

但是,如果我这样运行它:
java -cp jcifs-1.3.17.jar netp

我得到:
Error: Could not find or load main class netp

我究竟做错了什么?

我在这里上传了完整的源代码:
https://www.box.com/s/po4frdmy0obqiroy9anp

注意:我正在Windows中执行所有操作。

最佳答案

看来您的myJavaApp类在某个程序包中,并且除了根本不设置类路径之外,您还省略了程序包名称。

我的目录结构进行测试:

.
\--- jcifs-1.3.17.jar
\--- testapp
     \--- myJavaApp.java

我这样编译它:
javac -cp jcifs-1.3.17.jar testapp/myJavaApp.java

如预期的那样,它在testapp文件夹中提供了myJavaApp.class。我已经在Linux上像这样运行它:
java -cp .:jcifs-1.3.17.jar testapp.myJavaApp

在这样的窗户上:
java -cp .;jcifs-1.3.17.jar testapp.myJavaApp

它扔了
jcifs.util.transport.TransportExceptionjava
java.net.NoRouteToHostException: No route to host

这意味着myJavaApp已成功运行。

如果我们删除了testapp Directoy,例如
.
\--- jcifs-1.3.17.jar
\--- myJavaApp.java

它编译与:
 javac -cp jcifs-1.3.17.jar myJavaApp.java

在Linux上运行时:
java -cp .:jcifs-1.3.17.jar myJavaApp

用于窗户
java -cp .;jcifs-1.3.17.jar myJavaApp

编辑:

所有java [c]命令都从root(.)/测试目录运行

编辑^ 2:

我已经下载了您的代码并将自己放置在netp目录中。像这样编译代码:
C:\netp>"C:\Program Files\Java\jdk1.6.0_25\bin\javac.exe" -cp jcifs-krb5-1.3.17.jar netp.java

并成功运行如下:
C:\netp>"C:\Program Files\Java\jdk1.6.0_25\bin\java.exe" -cp .;jcifs-krb5-1.3.17.jar netp

它输出:
START
END

07-27 22:55