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?


Anmelden zum Antworten