Problem mit Panels
-
Guten Abend!
Ich arbeite an einem Launcher für mein Projekt Luna Arma, dieser erfüllt
seine Aufgaben.Einzig folgendes Problem ist der Fall:
Wenn ich, nach dem ich eruiert habe, dass ein Update vorhanden ist, auf Update
klicke, wird der MainPainSearchUpdate nicht auf Visible(false) gesetzt, sondern
erst nach dem das Update durchgeführt wurde.Dadurch wird die JProgressBar erst nach dem Update angezeigt (MainPanelUpdateStat) - was jedoch nicht der Sinn der ProgressBar ist, sie soll
ja den Fortschritt zeigen.Hier der Ausschnitt aus dem Code:
private void UpdateActionPerformed(java.awt.event.ActionEvent evt) { // init Progressbar this.UpdateStat.setMinimum(0); this.UpdateStat.setMaximum(this.updater.getAnzFiles()*2); this.UpdateStat.setValue(0); // die Panels auf dem Layered Panel this.MainPanelUpdateStat.setVisible(true); this.MainPanelUpdateSearch.setVisible(false); this.MainPanelPatchlog.setVisible(false); // Update durchführen this.updater.Update(this.UpdateStat); }
Könnt ihr mir weiterhelfen? Braucht ihr ev. noch weiteren Code?
Mit freundlichen Grüßen
ITEDVO
-
Für besseres Verständnis weiterer Code:
private void SearchUpdateActionPerformed(java.awt.event.ActionEvent evt) { this.updater = new LunaArmaUpdate(); this.ActVersionOut.setText(updater.getSvid()); this.ClientVersionOut.setText(updater.getCvid()); this.UpdateFound.setText(updater.getUpdate()); this.MainPanelUpdateSearch.setVisible(true); this.MainPanelPatchlog.setVisible(false); this.MainPanelUpdateStat.setVisible(false); }
/* Von der Klasse LunaArmaUpdate */ public void Update(javax.swing.JProgressBar probar) { int anz = getAnzFiles(); if(anz > 0) { getFiles(anz, probar); extract(anz, probar); } else System.out.println("Keine Files vorhanden"); }
private void getFiles(int anz, javax.swing.JProgressBar probar) { URL url; InputStream inputStream; String filename=""; try { Wini ini = new Wini(new File("tempPatch/head.patch")); for(int i=0; i<anz; i++) { filename = ini.get("Files", "File"+Integer.toString(i+1)); System.out.println(filename); try { // read this file into InputStream url = new URL("Zensiert" + filename); inputStream = url.openStream(); // write the inputStream to a FileOutputStream OutputStream out = new FileOutputStream(new File("tempPatch/"+filename)); int read = 0; byte[] bytes = new byte[1024]; while ((read = inputStream.read(bytes)) != -1) { out.write(bytes, 0, read); } inputStream.close(); out.flush(); out.close(); } catch (IOException e) { System.out.println(e.getMessage()); } probar.setValue(i+1); try { Thread.sleep(500); } catch (InterruptedException ex) { Logger.getLogger(LunaArmaUpdate.class.getName()).log(Level.SEVERE, null, ex); } } } catch (IOException ex) { Logger.getLogger(LunaArmaUpdate.class.getName()).log(Level.SEVERE, null, ex); } }
-
Ok, kann geclosed werden, habs mit einem Thread für Update gelöst.
@Override public void run() { this.Update(); }
private void UpdateActionPerformed(java.awt.event.ActionEvent evt) { this.UpdateStat.setMinimum(0); this.UpdateStat.setMaximum(this.updater.getAnzFiles()*2); this.UpdateStat.setValue(0); this.MainPanelUpdateStat.setVisible(true); this.MainPanelUpdateSearch.setVisible(false); this.MainPanelPatchlog.setVisible(false); this.updater.start(); }
Tut mir leid dass ich soviel wirbel gemacht habe.
Mich würd jetzt nur noch wunder nehmen, wieso dies ohne extra thread nicht funzt?