Ich bin am verzweifeln!
Folgende Problematik: Ich habe ein kleines Tool geschrieben, welches Log-Files analysiert und am Ende ein Balkendiagramm ausgibt. Das funktioniert auch wunderschön.
Während der Analyse der Logfiles (welche ja etwas länger dauern kann) wollte ich nun einen Progressmonitor anzeigen.
Hier mal ein KSKB zum selber probieren (gekürzt, selbes Verhalten):
Wenn ihr das so ausführt, dann aktualisiert sich der ProgressMonitor nicht und man sieht nur ein graues Fenster.
Wenn ihr Zeile 47 auskommentiert und Zeile 48 wieder aktiviert, dann seht ihr den wunderschönen ProgressMonitor, so wie er es soll.
Jetzt hab ich schon viel versucht: Auslagerung der Analyse in einen anderen Thread, Auslagerung des ProgressMonitors in einen anderen Thread... Nichts funktioniert!
Ich hoffe jemand von der Community kann mir weiterhelfen.
Ich freue mich auf eure Beiträge!
Folgende Problematik: Ich habe ein kleines Tool geschrieben, welches Log-Files analysiert und am Ende ein Balkendiagramm ausgibt. Das funktioniert auch wunderschön.
Während der Analyse der Logfiles (welche ja etwas länger dauern kann) wollte ich nun einen Progressmonitor anzeigen.
Hier mal ein KSKB zum selber probieren (gekürzt, selbes Verhalten):
Java:
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TreeMap;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.ProgressMonitor;
/**
*
* @author Dominik Sust
* @creation 11.08.2014 10:38:05
*/
public class Main_KSKB
{
private final String version = "1.0";
//Datumsformat im Logfile
private String DATEFORMAT = "yyyy-MM-dd HH:mm:ss,SSS";
//Beginnt das Datum im Log ab dem ersten Zeichen?
private int DATE_OFFSET = 1;
//Nach welchem String soll gesucht werden?
private String SEARCHSTRING = "Validiere ";
//Name der App
private String APPNAME = "APPNAME";
private final TreeMap<Integer, Integer> statistic = new TreeMap<Integer, Integer>();
private Date firstDate = new Date();
private Date lastDate = new Date();
private SimpleDateFormat sdf;
private SimpleDateFormat sdf_result = new SimpleDateFormat( "dd.MM.yyyy" );
/**
* @param args the command line arguments
*/
public static void main( String[] args )
{
Main_KSKB m = new Main_KSKB();
m.init();
//m.analyze();
}
private JFrame frame;
private JTextField t_name;
private JTextField t_datum;
private JTextField t_datumoffset;
private JTextField t_suchstring;
public static int file_counter = 1;
public static int total;
public Main_KSKB()
{
for ( int i = 0; i < 24; i++ )
{
statistic.put( i, 0 );
}
sdf = new SimpleDateFormat( DATEFORMAT );
}
private void init()
{
frame = new JFrame( "AppActivity - Version " + version );
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
GridLayout gl = new GridLayout( 5, 2, 5, 5 );
frame.setLayout( gl );
JLabel l_name = new JLabel( "Name der App: " );
t_name = new JTextField();
frame.add( l_name );
frame.add( t_name );
JLabel l_datum = new JLabel( "Aufbau des Datumsstrings: " );
t_datum = new JTextField();
frame.add( l_datum );
frame.add( t_datum );
JLabel l_datumoffset = new JLabel( "Offset Datumsstrings: " );
t_datumoffset = new JTextField();
frame.add( l_datumoffset );
frame.add( t_datumoffset );
JLabel l_suchstring = new JLabel( "Suchstring: " );
t_suchstring = new JTextField();
frame.add( l_suchstring );
frame.add( t_suchstring );
JButton b_ok = new JButton( "OK" );
b_ok.addActionListener( new ActionListener()
{
@Override
public void actionPerformed( ActionEvent e )
{
frame.dispose();
analyze();
}
} );
frame.add( b_ok );
JButton b_cancel = new JButton( "Abbruch" );
b_cancel.addActionListener( new ActionListener()
{
@Override
public void actionPerformed( ActionEvent e )
{
System.exit( 0 );
}
} );
frame.add( b_cancel );
frame.pack();
frame.setLocationRelativeTo( null);
frame.setVisible( true );
}
public void analyze()
{
// DATEFORMAT = t_datum.getText();
// DATE_OFFSET = Integer.valueOf( t_datumoffset.getText().trim() );
// APPNAME = t_name.getText();
// SEARCHSTRING = t_suchstring.getText();
//Erstellung der fileList
total = 9;
ProgressMonitor pm = new ProgressMonitor( null, "Analysiere...", "Fortschritt", 1, total );
//for ( File current : fileList )
for ( int i = 0; i < 10; i++ )
{
//Analyse wird durchgeführt
try
{
Thread.sleep( 500 );
}
catch ( InterruptedException ex )
{
Logger.getLogger( Main_KSKB.class.getName() ).log( Level.SEVERE, null, ex );
}
file_counter++;
pm.setProgress( file_counter );
}
System.out.println( statistic.toString() );
System.out.println( "First Date: " + sdf.format( firstDate ) );
System.out.println( "Last Date: " + sdf.format( lastDate ) );
buildResultFrame();
}
private void buildResultFrame()
{
JFrame f2 = new JFrame( "Ergebnis" );
f2.setSize( new Dimension(100, 100));
f2.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
f2.setLocationRelativeTo( null);
f2.setVisible( true );
}
}
Wenn ihr das so ausführt, dann aktualisiert sich der ProgressMonitor nicht und man sieht nur ein graues Fenster.
Wenn ihr Zeile 47 auskommentiert und Zeile 48 wieder aktiviert, dann seht ihr den wunderschönen ProgressMonitor, so wie er es soll.
Jetzt hab ich schon viel versucht: Auslagerung der Analyse in einen anderen Thread, Auslagerung des ProgressMonitors in einen anderen Thread... Nichts funktioniert!
Ich hoffe jemand von der Community kann mir weiterhelfen.
Ich freue mich auf eure Beiträge!