繁体   English   中英

Java Smack FileTransfer

[英]Java Smack FileTransfer

好吧,我从网页下面的代码,它工作:

@Override
public void fileTransferRequest(FileTransferRequest request) {
    // Check to see if the request should be accepted

    final IncomingFileTransfer transfer = request.accept();
    runnningFileTransfer = transfer;
    try
    {
       final File file = new File("/Users/Akku/Downloads/in2" + request.getFileName());
       transfer.recieveFile(file);
       t = new Thread(new Runnable() {

        @Override
        public void run() {
            // TODO Auto-generated method stub
            try {
                transfer.recieveFile(file);
                System.out.println("DONE?");
            } catch (XMPPException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
       });
       t.run();

该代码运行,并且在我的10MB测试文件的情况下,需要花费大量时间。 可悲的是,我需要知道传输是否完成或进度如何。 有趣的是,我还从网络上获得了这部分内容(它只是在睡眠并检查进度),当我添加它时,文件传输不再起作用:

       while(!transfer.isDone()) 
       {
            if(transfer.getStatus().equals(Status.error))
            {
                 System.out.println("ERROR"+transfer.getError() + " EX: " + transfer.getException());
            } 
            else 
            {
                 System.out.println("Written: "+transfer.getAmountWritten());
                 System.out.println("STATUS"+transfer.getStatus());
                 System.out.println("PROGRESS"+transfer.getProgress());
            }
        try
        {
                Thread.sleep(10000);
                System.out.println("Waiting...");
           }
           catch (Exception e)
           {
            e.printStackTrace();
           }
       }

任何暗示为什么会发生这种情况? 我想这是Java的东西,因为上面的代码段完美地工作了。

可行的情况下应该抛出异常。 您调用转移对象上的两次接收。 当它再次尝试创建文件时,第二个调用应产生一个异常。 在这种情况下,不需要第二个调用以及创建线程,因为transfer()方法是异步的,并且具有自己的内部线程。

很难说为什么它不适用于您的状态检查,因为您没有显示在哪里进行此检查。 我的怀疑是您正在读取线程上调用它,从而阻止了新数据包的读取。 您的循环检查传输状态应在其自己的线程中运行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM