public void start(){
		timer.start();
		downloadThread = new Thread(new Runnable() {
			
			@Override
			public void run() {
		    	BufferedInputStream in = null;
		    	FileOutputStream fout = null;
		    	long downloaded = 0;
		    	for(FileDownloadItem info : items){
			    try
			    {
					if(!info.getSaveFile().getParentFile().exists()) info.getSaveFile().getParentFile().mkdirs();
			    	URLConnection connection = info.getDownloadUrl().openConnection();
			    	in = new BufferedInputStream(connection.getInputStream());
					fout = new FileOutputStream(info.getSaveFile());
			    	byte data[] = new byte[1024];
			    	int count;
			    	while ((count = in.read(data, 0, 1024)) != -1)
			    	{
			    		fout.write(data, 0, count);
			    		downloaded += count;
			    		onDownload(new FileDownloadEvent(info.getSaveFile(), 
			    				info.getDownloadUrl(), 
			    				connection.getContentLengthLong(), 
			    				downloaded, 
			    				false, 
			    				false, 
			    				FileDownloader.this));
			    	}
			    }
			    catch (IOException e) {
						e.printStackTrace();
				}
			    finally
			    {
			    	try{
				    	if (in != null)
				    		in.close();
				    	if (fout != null)
				    		fout.close();
				    	downloaded = 0;
			    		}catch (Exception e) {
							// TODO: handle exception
			    		}
			    }
		    }
		    timer.stop();
		    onComplete(new ActionEvent(FileDownloader.this, 0, ""));
		}
		});
		downloadThread.start();
	}