Hi, I'm new here. Need help bad!
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?
Code :
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;
}
Re: Hi, I'm new here. Need help bad!
I'd say you need to have a look at all the files you need to transfer and sum their size up into one total size.
Does that make sense?
// Json