zoukankan      html  css  js  c++  java
  • java 实现自定义事件

    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.net.URLConnection;
    import java.text.DecimalFormat;
    import java.util.ArrayList;
    import java.util.EventListener;
    import java.util.List;
    
    public class Test {
        
        public static void main(String[] args) 
        {
            Test.FileDownloader fd = new FileDownloader("http://download.microsoft.com/download/e/c/9/ec94a5d4-d0cf-4484-8b7a-21802f497309/Vs6sp6.exe" 
                    , "f:\Vs6sp6.exe");
            
            fd.addDownloadListener(new DownloadListener() {
                @Override
                public void DownloadProgress(int totalLength ,int bytesCompleted) {
                    System.out.println("订阅者1进度,已下载:" + bytesCompleted + "字节");
                } 
            });
            
            fd.addDownloadListener(new DownloadListener() {
                @Override
                public void DownloadProgress(int totalLength ,int bytesCompleted) {
                    double percent = (double)bytesCompleted*100/(double)totalLength;
                    DecimalFormat df = new java.text.DecimalFormat("#.00");  
                    System.out.println("订阅者2进度,已下载:" + df.format(percent) + "%");
                } 
            });
            
            fd.download();
            System.out.println("任务下载完成!");
        }
    
        public static class FileDownloader implements DownloadListener
        {
            private List<DownloadListener> downloadListeners = new ArrayList<DownloadListener>();
            
            private String URL = null;
            private String savePath = null;
            
            public FileDownloader(String url, String savePath)
            {
                this.URL = url;
                this.savePath = savePath;
            }
            
            @SuppressWarnings("resource")
            public boolean download()
            {
                int bytesum = 0;
                int byteread = 0;
    
                URL url;
                try {
                    url = new URL(this.URL);
                } catch (MalformedURLException e1) {
                    e1.printStackTrace();
                    return false;
                }
    
                try {
                    URLConnection conn = url.openConnection();
                    int totalLength = conn.getContentLength();
                    InputStream inStream = conn.getInputStream();
                    FileOutputStream fs = new FileOutputStream(this.savePath);
    
                    byte[] buffer = new byte[1204];
                    while ((byteread = inStream.read(buffer)) != -1) {
                        bytesum += byteread;
                        fs.write(buffer, 0, byteread);
                        DownloadProgress(totalLength ,bytesum);
                    }
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                    return false;
                } catch (IOException e) {
                    e.printStackTrace();
                    return false;
                } catch (Exception e){
                    e.printStackTrace();
                    return false;
                }
                
                return true;
            }
    
            @Override
            public void DownloadProgress(int totalLength ,int bytesCompleted) {
                for(DownloadListener listener : downloadListeners){
                    listener.DownloadProgress(totalLength ,bytesCompleted);
                }
            }
            
            public void addDownloadListener(DownloadListener listener)
            {
                downloadListeners.add(listener);
            }
        }
        
        public interface DownloadListener extends EventListener 
        {
            public void DownloadProgress(int totalLength ,int bytesCompleted);
        }
    
        
    }
  • 相关阅读:
    由基于qml,c++的串口调试工具浅谈qml与c++混合编程
    qt5_qml_Opengl_shader 第一弹----------------------openglunderqml的简化及介绍
    Delphi 的接口机制——接口操作的编译器实现过程(2)
    Delphi 的接口机制——接口操作的编译器实现过程(1)
    ddd
    [leetcode]Gray Code
    synapse socket总结一:服务器模型
    CentOS 6.5(64bit)安装GCC4.8.2+Qt5.2.1(替换GCC的链接库)
    Qt打开外部程序和文件夹需要注意的细节(Qt调用VC写的动态库,VC需要用C的方式输出函数,否则MinGW32编译过程会报错)
    Qt+SQLite数据加密的一种思路(内存数据库)
  • 原文地址:https://www.cnblogs.com/nanfei/p/8418663.html
Copyright © 2011-2022 走看看