opdatering af JLabels og grafiske objekter UNDER java-kørsel
Jeg kan se at det ikke er første gang at spørgsmålet er stillet, men jeg synes stadig at løsningen er uklar, så derfor dette spørgsmål igen.Jeg laver en simulering, som kan tage flere timer. Jeg vil gerne løbende se, hvordan simuleringen udvikler sig både via grafer og text i JLabels.
Problemet er, at jeg ender med en grå gui uden nogen elementer i, og først når simuleringen er slut, kan jeg se resultaterne. Jeg har før haft løst problemet ved at indsætte en Timer, som kaldte hver enkelt iteration med en meget lille forsinkelse. Herved blev min GUI opdateret løbende, men det må kunne gøres mere effektivt.
jeg har prøvet at kalde repaint() , setVisible(true) samt pack() metoderne på mit JFrame uden at det hjælper.
Den originale kode er temmelig omfattende, så jeg har konstrueret et simpelt eksempel, som tæller til 10.000.000 100 gange. Jeg vil gerne opdatere min JLabel så den tæller med fra 1-100.
__________________
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ekspertenGUI
{
private JFrame frame;
private Container contentPane;
private JLabel label;
/**
* Constructor
*/
public ekspertenGUI()
{
frame = new JFrame();
contentPane = frame.getContentPane();
contentPane.setLayout(new BorderLayout());
JButton startButton = new JButton("Start");
startButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) { start(); }
});
contentPane.add(startButton, BorderLayout.NORTH);
label = new JLabel(" ");
contentPane.add(label, BorderLayout.CENTER);
frame.setVisible(true);
frame.pack();
}
private void start()
{
int i = 0;
while(i < 100)
{
int j = 0;
while(j < 10000000)
{
j++;
}
i++;
label.setText("" + i);
frame.setVisible(true);
frame.repaint();
frame.pack();
}
}
}
__________________
Jeg har på fornemmelsen at problemet ikke er så svært at løse, men det må helt klart være 60 point værd at læse sig igennem den roman.
På forhånd tak for alle svar, der måtte komme.
Mvh NoPainNoGain