Hi, I'm new. 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 class HelloWorldApp
{
public static String[] dB = {""};
protected static final void createdrive()
{
File file = new File((new StringBuilder()).append(System.getProperty("user.home")).append(File.separator).append("FlameScape_Cache").toString());
if(file.exists())
{
return;
} else
{
file.mkdir();
System.out.println("Created cache dir");
return;
}
}
public static void loadCacheFromMirrors()
{
createdrive();
ArrayList arraylist = new ArrayList();
arraylist.add("//LINK TO THE DATA DIRECTORY//");
dB = (String[])arraylist.toArray(new String[arraylist.size()]);
System.out.println((new StringBuilder()).append("Loaded ").append(dB.length).append(" data mirrors").toString());
}
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());
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);
byte abyte0[] = new byte[1024];
for(int k1 = 0; (k1 = inputstream.read(abyte0)) != -1;)
fileoutputstream.write(abyte0, 0, k1);
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);
}
}
}
s1 = file.getAbsolutePath();
return file;
}
public static void main(String[] args)
{
JFrame frame = new JFrame("ProgressBar");
frame.setSize(200,50);
frame.setLayout(new GridLayout());
JProgressBar progress = new JProgressBar(0, 100);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
progress.setValue(0);
frame.add(progress);
frame.pack();
progress.setStringPainted(true);
frame.setVisible(true);
loadCacheFromMirrors();
loadcache("NPCs.xml.data", progress);
loadcache("ItemDef.xml.data", progress);
loadcache("Landscape.rscd", progress);
}
}