Huhu, ich habe schon länger ein scheinbar für mich unlösbares Problem: Trotz eines Threads hängt sich die GUI auf. Ich komm echt nicht dahinter, was da los ist ?
Wäre echt reichlich dankbar wenn ihr mir da helfen könntet
Achtung: bei schnellen DSL-Leitungen wird das file u.U. so schnell geladen, das man nichts merkt. dann einfach die Zeile
durch
ersetzen.
Wäre echt reichlich dankbar wenn ihr mir da helfen könntet
Java:
package Test;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.net.URLConnection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
public class Threads {
public static void main(String[] args)
{
// Shell wird erzeugt und mittig positioniert
// ------------------------------------------
final Display display = new Display();
final Shell shell = new Shell(display);
shell.setSize(200,200);
// ------------------------------------------
// Shellunterteilung wird erzeugt
// ------------------------------
GridLayout gridLayout1 = new GridLayout();
gridLayout1.numColumns = 1;
shell.setLayout(gridLayout1);
shell.setBackgroundMode(SWT.INHERIT_DEFAULT);
// ------------------------------
//Button fürs Testen
//------------------
final Button B_Start = new Button(shell,SWT.BORDER);
B_Start.setText("Start [0]");
B_Start.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL | GridData.VERTICAL_ALIGN_FILL));
//------------------
//Listener fürs Fertig markieren
//------------------------------
B_Start.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
//-----------------------------
new Thread() {
public void run() {
Runnable r = new Runnable(){
public void run(){
try {
laderunter(B_Start);
} catch (IOException e) {
e.printStackTrace();
}
}
};
display.asyncExec(r);
}
}.start();
//-----------------------------
}});
//------------------------------
// Shell wird geöffnet
// -------------------
shell.open();
// -------------------
//--------------------
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
//--------------------
}
static void laderunter(Button B_Start) throws IOException
{
B_Start.setText("Go [1]");
final URL url = new URL("http://speedtest.qsc.de/10MB.qsc");
final URLConnection conn = url.openConnection();
final InputStream is = new BufferedInputStream(conn.getInputStream());
final OutputStream os =
new BufferedOutputStream(new FileOutputStream("10MB.qsc"));
byte[] chunk = new byte[1024];
int chunkSize;
while ((chunkSize = is.read(chunk)) != -1) {
os.write(chunk, 0, chunkSize);
}
os.flush(); // Necessary for Java < 6
os.close();
is.close();
B_Start.setText("End [" + "2" + "]");
}
}
Achtung: bei schnellen DSL-Leitungen wird das file u.U. so schnell geladen, das man nichts merkt. dann einfach die Zeile
Java:
final URL url = new URL("http://speedtest.qsc.de/10MB.qsc");
durch
Java:
final URL url = new URL("http://speedtest.qsc.de/500MB.qsc");
Zuletzt bearbeitet: