JProgressMonitor wird nicht sofort sichtbar.

struchli

Grünschnabel
Hallo Zusammen

Ich habe folgendes Problem:
Ich starte einen Thread und der Threadfortschritt wird in einem JProgressMonitor dargestellt. Leider funktioniert dies nur mangelhaft. Der JProgressMonitor wird erst nachdem die erste Aufgabe beendet ist sichtbar, also nachdem die for-Schleife ein erstes mal durch ist.

Kann mir jemand Helfen? Was mache ich Falsch?

Vielen Dank für die Antworten.

Hier mein Code:
Code:
package data;

import java.io.File;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Vector;

import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.ProgressMonitor;

import bo.variablen;

import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelExec;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.UserInfo;

public class cispRestart {
	private JFrame frmMiddleware;
	private variablen va;
	private writeFiels wf = new writeFiels();
	private Vector<?> restartVector;
	private String[][] restartListe;
	private Thread thr;
	private String input = "";
	private static final String Select = "Servergruppe wählen";
	private String OS = "";

	public void restartCispClient(JFrame frame, variablen var){
		va = var;
		frmMiddleware = frame;
		va.setAbbruch(false);
		va.setWait(false);
		String[] server = new String[] {"GK", "WAMAS", "ERGO" };
		input = (String) JOptionPane.showInputDialog(frmMiddleware,
				"Bitte die gewünschte Gruppe Wählen",Select, JOptionPane.INFORMATION_MESSAGE, 
				null, server,"GK");
		if(input == null){
			va.setAbbruch(true);
			va.setWait(true);
		}else{
			if(input.equals("GK")){
				restartVector = wf.readLines(new File(va.getPfad() + "\\listen\\GK.txt"));
				OS = "blablabla";
			}else if(input.equals("WAMAS")){
				restartVector = wf.readLines(new File(va.getPfad() + "\\listen\\WAMAS.txt"));
				OS = "blablabla";
			}else if(input.equals("ERGO")){
				restartVector = wf.readLines(new File(va.getPfad() + "\\listen\\ERGO.txt"));
				OS = "blablabla";
			}
			Runnable run = new Runnable() {
				@SuppressWarnings({ "deprecation" })
				public void run() {
					final ProgressMonitor pM = new ProgressMonitor(frmMiddleware, "Server werden verarbeitet", "", 0, restartVector.size());
					while(!pM.isCanceled()){
						restartListe = new String[restartVector.size()][2];
						for(int i=0;i<restartVector.size();i++){
							String host = (String) restartVector.elementAt(i);
							restartListe[i][0] = host;
							try{
								JSch jsch=new JSch();  
								String user="user";
								Session session=jsch.getSession(user, host, 22);

								UserInfo ui=new MyUserInfo();
								session.setUserInfo(ui);
								session.setConfig("PreferredAuthentications", "publickey,keyboard-interactive,password");
								session.connect();
								String sudo_pass=null;
								sudo_pass="";
								Channel channel=session.openChannel("exec");
								((ChannelExec)channel).setCommand(OS);
								((ChannelExec)channel).setErrStream(System.err);

								channel.connect();
								Thread.sleep(2000);
								channel.disconnect();
								Thread.sleep(10000);
								Channel channel2=session.openChannel("exec");
								((ChannelExec)channel2).setCommand("ps -ef | grep cisp | grep -v grep | grep -v sudo | grep -v su | grep -v bash | awk '{print $(5)}'");
								InputStream in=channel2.getInputStream();
								OutputStream out=channel2.getOutputStream();
								((ChannelExec)channel2).setErrStream(System.err);

								channel2.connect();

								out.write((sudo_pass+"\n").getBytes());
								out.flush();

								byte[] tmp=new byte[1024];
								while(true){
									while(in.available()>0){
										int j=in.read(tmp, 0, 1024);
										String time = new String(tmp, 0, j);
										restartListe[i][1] = time;
									}
									if(channel2.isClosed()){
										//System.out.println("exit-status: "+channel.getExitStatus());
										break;
									}
									try{Thread.sleep(1000);}catch(Exception ee){
										wf.logging(ee.toString());
									}
								}
								channel2.disconnect();
								session.disconnect();
								//							restartListe[i][1] = "CISP Client gestartet";
							}
							catch(Exception e){
								wf.logging(e.toString());
								restartListe[i][1] = "Fehler beim Restart -> siehe Log";
							}
							pM.setProgress((i + 1));
							pM.setNote("Server " + (i + 2) + " von " + restartVector.size() + " wird bearbeitet");
						}
						va.setRestartListe(restartListe);
						va.setWait(true);
						thr.stop();
						thr = null;
					}
					if(pM.isCanceled() == true){
						va.setWait(true);
						va.setAbbruch(true);
						thr.stop();
						thr = null;
					}
				}
			};


			thr = new Thread(run);
			thr.start();	
		}
	}

}
 

Funresort

Erfahrenes Mitglied
Du musst den Progessmonitor einmal anzeigen lassen bevor du die erste aufgabe durchläufst sonst klappt das nicht. Würd ihn direkt vor der While einmal anzeigen lassen ;)