Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 代码在PC上工作,而不是在手机上_Java_Android_Jcifs - Fatal编程技术网

Java 代码在PC上工作,而不是在手机上

Java 代码在PC上工作,而不是在手机上,java,android,jcifs,Java,Android,Jcifs,我正在尝试从jCIFS库的Windows共享中获取文件列表。我从jCIFS站点的示例中获得了以下代码 try { String p = "smb://domain.tld/path/to/the/folder/"; NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("domain", "username", "password"); SmbFile file; SmbFile[] f

我正在尝试从jCIFS库的Windows共享中获取文件列表。我从jCIFS站点的示例中获得了以下代码

try {
    String p = "smb://domain.tld/path/to/the/folder/";
    NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("domain", "username", "password");

    SmbFile file;
    SmbFile[] files = new SmbFile[0];

    file = new SmbFile(p, auth);

    long t1 = System.currentTimeMillis();
    try {
        files = file.listFiles();
    } catch (Exception e) {
        e.printStackTrace();
    }
    long t2 = System.currentTimeMillis() - t1;

    for( int i = 0; i < files.length; i++ ) {
        System.out.println(files[i].getName() );
    }
    System.out.println();
    System.out.println( files.length + " files in " + t2 + "ms" );
} catch(Exception e) {
    e.printStackTrace();
}
试试看{
字符串p=”smb://domain.tld/path/to/the/folder/";
NtlmPasswordAuthentication auth=新的NtlmPasswordAuthentication(“域”、“用户名”、“密码”);
SMB文件;
SmbFile[]files=新SmbFile[0];
文件=新的SmbFile(p,auth);
long t1=System.currentTimeMillis();
试一试{
files=file.listFiles();
}捕获(例外e){
e、 printStackTrace();
}
长t2=System.currentTimeMillis()-t1;
对于(int i=0;i
如果我为PC创建一个新项目并将其复制到main方法中,这将花费很长时间(大约12秒,为什么?),但它将返回文件列表而不会出现任何错误。如果我在Android活动中复制完全相同的代码,将导致错误:

09-23 21:49:08.605: E/AndroidRuntime(32659): FATAL EXCEPTION: main
09-23 21:49:08.605: E/AndroidRuntime(32659): java.lang.ExceptionInInitializerError
09-23 21:49:08.605: E/AndroidRuntime(32659):    at jcifs.smb.SmbFile.getFirstAddress(SmbFile.java:864)
09-23 21:49:08.605: E/AndroidRuntime(32659):    at jcifs.smb.SmbFile.connect(SmbFile.java:951)
09-23 21:49:08.605: E/AndroidRuntime(32659):    at jcifs.smb.SmbFile.connect0(SmbFile.java:880)
09-23 21:49:08.605: E/AndroidRuntime(32659):    at jcifs.smb.SmbFile.resolveDfs(SmbFile.java:669)
09-23 21:49:08.605: E/AndroidRuntime(32659):    at jcifs.smb.SmbFile.send(SmbFile.java:773)
09-23 21:49:08.605: E/AndroidRuntime(32659):    at jcifs.smb.SmbFile.doFindFirstNext(SmbFile.java:1986)
09-23 21:49:08.605: E/AndroidRuntime(32659):    at jcifs.smb.SmbFile.doEnum(SmbFile.java:1738)
09-23 21:49:08.605: E/AndroidRuntime(32659):    at jcifs.smb.SmbFile.listFiles(SmbFile.java:1715)
09-23 21:49:08.605: E/AndroidRuntime(32659):    at jcifs.smb.SmbFile.listFiles(SmbFile.java:1648)
09-23 21:49:08.605: E/AndroidRuntime(32659):    at fi.peltoset.mikko.mpsharepoint.SharedFiles.onCreate(SharedFiles.java:46)
09-23 21:49:08.605: E/AndroidRuntime(32659):    at android.app.Activity.performCreate(Activity.java:4543)
09-23 21:49:08.605: E/AndroidRuntime(32659):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1071)
09-23 21:49:08.605: E/AndroidRuntime(32659):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2181)
09-23 21:49:08.605: E/AndroidRuntime(32659):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2260)
09-23 21:49:08.605: E/AndroidRuntime(32659):    at android.app.ActivityThread.access$600(ActivityThread.java:139)
09-23 21:49:08.605: E/AndroidRuntime(32659):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1277)
09-23 21:49:08.605: E/AndroidRuntime(32659):    at android.os.Handler.dispatchMessage(Handler.java:99)
09-23 21:49:08.605: E/AndroidRuntime(32659):    at android.os.Looper.loop(Looper.java:156)
09-23 21:49:08.605: E/AndroidRuntime(32659):    at android.app.ActivityThread.main(ActivityThread.java:5045)
09-23 21:49:08.605: E/AndroidRuntime(32659):    at java.lang.reflect.Method.invokeNative(Native Method)
09-23 21:49:08.605: E/AndroidRuntime(32659):    at java.lang.reflect.Method.invoke(Method.java:511)
09-23 21:49:08.605: E/AndroidRuntime(32659):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
09-23 21:49:08.605: E/AndroidRuntime(32659):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
09-23 21:49:08.605: E/AndroidRuntime(32659):    at dalvik.system.NativeStart.main(Native Method)
09-23 21:49:08.605: E/AndroidRuntime(32659): Caused by: java.lang.ExceptionInInitializerError
09-23 21:49:08.605: E/AndroidRuntime(32659):    at jcifs.UniAddress.<clinit>(UniAddress.java:62)
09-23 21:49:08.605: E/AndroidRuntime(32659):    ... 24 more
09-23 21:49:08.605: E/AndroidRuntime(32659): Caused by: android.os.NetworkOnMainThreadException
09-23 21:49:08.605: E/AndroidRuntime(32659):    at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1190)
09-23 21:49:08.605: E/AndroidRuntime(32659):    at java.net.InetAddress.lookupHostByName(InetAddress.java:394)
09-23 21:49:08.605: E/AndroidRuntime(32659):    at java.net.InetAddress.getLocalHost(InetAddress.java:374)
09-23 21:49:08.605: E/AndroidRuntime(32659):    at jcifs.netbios.NbtAddress.<clinit>(NbtAddress.java:187)
09-23 21:49:08.605: E/AndroidRuntime(32659):    ... 25 more
09-2321:49:08.605:E/AndroidRuntime(32659):致命异常:main
09-2321:49:08.605:E/AndroidRuntime(32659):java.lang.ExceptionInInitializeError
09-2321:49:08.605:E/AndroidRuntime(32659):在jcifs.smb.SmbFile.getFirstAddress(SmbFile.java:864)
09-2321:49:08.605:E/AndroidRuntime(32659):在jcifs.smb.SmbFile.connect(SmbFile.java:951)
09-2321:49:08.605:E/AndroidRuntime(32659):在jcifs.smb.SmbFile.connect0(SmbFile.java:880)
09-2321:49:08.605:E/AndroidRuntime(32659):在jcifs.smb.SmbFile.resolveDfs(SmbFile.java:669)
09-2321:49:08.605:E/AndroidRuntime(32659):在jcifs.smb.SmbFile.send(SmbFile.java:773)
09-2321:49:08.605:E/AndroidRuntime(32659):在jcifs.smb.SmbFile.doFindFirstNext(SmbFile.java:1986)
09-2321:49:08.605:E/AndroidRuntime(32659):在jcifs.smb.SmbFile.doEnum(SmbFile.java:1738)
09-2321:49:08.605:E/AndroidRuntime(32659):在jcifs.smb.SmbFile.listFiles(SmbFile.java:1715)
09-2321:49:08.605:E/AndroidRuntime(32659):在jcifs.smb.SmbFile.listFiles(SmbFile.java:1648)
09-23 21:49:08.605:E/AndroidRuntime(32659):在fi.peltoset.mikko.mpsharepoint.SharedFiles.onCreate(SharedFiles.java:46)
09-2321:49:08.605:E/AndroidRuntime(32659):在android.app.Activity.performCreate(Activity.java:4543)上
09-2321:49:08.605:E/AndroidRuntime(32659):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1071)上
09-2321:49:08.605:E/AndroidRuntime(32659):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2181)
09-2321:49:08.605:E/AndroidRuntime(32659):位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2260)
09-2321:49:08.605:E/AndroidRuntime(32659):在android.app.ActivityThread.access$600(ActivityThread.java:139)
09-2321:49:08.605:E/AndroidRuntime(32659):在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1277)
09-2321:49:08.605:E/AndroidRuntime(32659):在android.os.Handler.dispatchMessage(Handler.java:99)上
09-2321:49:08.605:E/AndroidRuntime(32659):在android.os.Looper.loop(Looper.java:156)上
09-2321:49:08.605:E/AndroidRuntime(32659):位于android.app.ActivityThread.main(ActivityThread.java:5045)
09-23 21:49:08.605:E/AndroidRuntime(32659):位于java.lang.reflect.Method.Invokenactive(本机方法)
09-2321:49:08.605:E/AndroidRuntime(32659):位于java.lang.reflect.Method.invoke(Method.java:511)
09-2321:49:08.605:E/AndroidRuntime(32659):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
09-2321:49:08.605:E/AndroidRuntime(32659):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
09-23 21:49:08.605:E/AndroidRuntime(32659):在dalvik.system.NativeStart.main(本机方法)
09-23 21:49:08.605:E/AndroidRuntime(32659):由以下原因引起:java.lang.ExceptionInInitializeError
09-2321:49:08.605:E/AndroidRuntime(32659):在jcifs.UniAddress.(UniAddress.java:62)
09-2321:49:08.605:E/AndroidRuntime(32659):。。。还有24个
09-23 21:49:08.605:E/AndroidRuntime(32659):由以下原因引起:android.os.NetworkOnMainThreadException
09-23 21:49:08.605:E/AndroidRuntime(32659):在android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1190)
09-2321:49:08.605:E/AndroidRuntime(32659):位于java.net.InetAddress.lookupHostByName(InetAddress.java:394)
09-2321:49:08.605:E/AndroidRuntime(32659):位于java.net.InetAddress.getLocalHost(InetAddress.java:374)
09-2321:49:08.605:E/AndroidRuntime(32659):在jcifs.netbios.NbtAddress.(NbtAddress.java:187)
09-2321:49:08.605:E/AndroidRuntime(32659):。。。25多
我已通过添加以下内容授予应用程序使用internet的权限

<uses-permission android:name="android.permission.INTERNET"></uses-permission>

进入清单文件

为什么?


SMB是网络访问。您正在UI线程上执行此操作。在安卓3+中,你不能。派生一个工作线程,或者使用
AsyncTask

实际上,它是Android 3及以上版本。如果您是根据API 9+编译的,您可以打开它在模拟器中捕获这些错误。看见
Caused by: android.os.NetworkOnMainThreadException