Now I am developing an embeded jar file to make a special game client for a java game on my website.
Ok Here is what I have in my NetBeans IDE. (This is just a segment of one class of many, I transfered it to my NetBeans for quick testing purposes).
The point is, it has to fetch the game files from my server and download them to the client's computer. I already programmed in downloading, and an updating system. It functions flawlessly. What I am working on now is a loading bar. The loading bar isn't swing for the client, it is UI inside the client. I am just using swing because I'm testing in NetBeans.
::::MY PROBLEM::::
I can calculate how many bytes have been transferred so far, but I do not know how to find the total size of the value before it is all transferred over.
I labeled where in the code box as "///////HERE///////////".
Can someone tell me what I must do to get the total bytes of the file before it downloads so I can make an accurate loading bar?
public static final File loadcache(String s1, JProgressBar progressbar) { progressbar.setIndeterminate(true); progressbar.setString("Analyzing " + s1); File file = new File((new StringBuilder()).append(System.getProperty("user.home")).append(File.separator).append("FlameScape_Cache").append(File.separator).append(s1).toString()); System.out.print(file.length()); if(!file.isFile()) { System.out.println((new StringBuilder()).append("Data file not found locally: ").append(s1).toString()); boolean flag = false; ArrayList arraylist = new ArrayList(); String as1[] = dB; int i1 = as1.length; for(int j1 = 0; j1 < i1;) { String s2 = as1[j1]; String s3 = (new StringBuilder()).append(s2).append(File.separator).append(s1).toString(); System.out.print((new StringBuilder()).append("\tTrying ").append(s3).append(" => ").toString()); try { HttpURLConnection httpurlconnection = (HttpURLConnection)(new URL(s3)).openConnection(); if(httpurlconnection.getResponseCode() != 200) { System.out.println("Unable to obtain file. (" + httpurlconnection.getResponseCode() + ")"); continue; } System.out.print("Downloading.. "); InputStream inputstream = httpurlconnection.getInputStream(); file.createNewFile(); FileOutputStream fileoutputstream = new FileOutputStream(file); int Total = ///////HERE///////////; progressbar.setIndeterminate(false); byte abyte1[] = new byte[1024]; int Progress = 0; for(int k1 = 0; (k1 = inputstream.read(abyte1)) != -1;) { Progress = Progress + abyte1.length; fileoutputstream.write(abyte1, 0, k1); progressbar.setValue(Math.round((Progress/Total)*100)); progressbar.setString(Math.round((Progress/Total)*100)) + "%"); } inputstream.close(); fileoutputstream.close(); System.out.println("Done."); break; } catch(Exception exception1) { System.out.println("Unable to obtain file."); arraylist.add(exception1); j1++; } } if(arraylist.size() == dB.length) { System.out.println((new StringBuilder()).append("Downloading data file ").append(s1).append(" failed.\nPlease report the error, and include the following exception data:").toString()); Exception exception; for(Iterator iterator = arraylist.iterator(); iterator.hasNext(); exception.printStackTrace()) exception = (Exception)iterator.next(); System.exit(1); } } else { System.out.println("The file: " + s1 + " has been found locally."); System.out.print((new StringBuilder()).append("\tTesing Checksum (").append(s1).append(")").append(" => ").toString()); String CHECKSUM1 = ""; String CHECKSUM2 = ""; try { CHECKSUM1 = MD5Checksum.getMD5Checksum(file.getPath()); URL CheckServ = new URL("//LINK TO DATA DIRECTORY//remotechecksum.php?file=" + s1); URLConnection yc = CheckServ.openConnection(); BufferedReader in = new BufferedReader(new InputStreamReader(yc.getInputStream())); String inputLine; while ((inputLine = in.readLine()) != null) { CHECKSUM2 = inputLine; break; } in.close(); } catch (Exception e) { e.printStackTrace(); } System.out.print("(1)" + CHECKSUM1 + ".. (2)" + CHECKSUM2 + ".."); if(CHECKSUM1.equalsIgnoreCase(CHECKSUM2)) { System.out.print("\tChecksum success. Matching strings."); } else { System.out.println((new StringBuilder()).append("\tChecksum failed. Nonmatching strings.").append(s1).toString()); //DOWNLOAD CODE REPEATED// } } s1 = file.getAbsolutePath(); return file; }