Synchronize JProgressBar and OutputStream

Hello;

I read a file via a FileInputStream and I write byte[] in a DataOutputStream over the network (via HTTPURLconnection and not a Java socket). I implements a JProgressBar to know the size is send, but it seems that the progressbar read the size is read and not the size is send. My question is: is there a way to know exactelly the byte size really send over a HttpUrlConnection at a time ?

thanks a lot

[427 byte] By [cadevolutiona] at [2007-9-29 23:12:50]
# 1

Here's some psuedocode on how you should be doing it..

regards,

Owen

progressbar.setMaximum ( 0 );

progressbar.setMaximum ( 100 );

long fileSize = file.getSize();

long sentByteCount = 0;

while ( sent != fileSize )

{

sentByteCount + = outstream.write ( whatever );

// working in percentages

progressbar.setValue ( (int) ( (sent / fileSize) * 100.0 );

}

progressbar.setValue ( 100 );

omcgoverna at 2007-7-16 3:37:33 > top of Java-index,Archived Forums,Portability & Platform Independence [Archive]...
# 2

You might want to create a thread that asks the outputstream for its progress periodically instead. If you write to a file, for instance, and update the progressbar every time write read a byte, you might end up with about a million calls to repaint, which isn't good.

So create an outputstream:

public class ProgressOutputStream extends OutputStream

{

OutputStream source;

int bytesWritten;

public ProgressOutputStream(OutputStream source)

{

this.source = source;

}

public void write(int n) throws IOException

{

bytesWritten += 1;

source.write(n);

}

public int getBytesWritten()

{

return bytesWritten;

}

}

And this:

public class StreamProgressBar extends JProgressBar

{

OutputStream stream;

public StreamProgressBar(OutputStream out, int size)

{

stream = new ProgressOutputStream(out);

setMinimumValue(0);

setMaximumValue(size);

}

private class ProgressMonitorThread extends Thread

{

public void run()

{

try{Thread.sleep(100);}catch(Exception e){e.printStackTrace();}

setValue(out.getBytesWritten());

}

}

}

This is just an example, and can be made much nicer...

Regards,

Nille

nille40a at 2007-7-16 3:37:33 > top of Java-index,Archived Forums,Portability & Platform Independence [Archive]...