MilM
Legacy Member
Ik zit wat vast bij het displayen van een progressbar/monitor.
De voorbeelden op internet maken veel gebruik van een timer en worden vaak opgeropen vanuit de statische main methode. Als ik deze laat runnen, werken deze voorbeelden perfect.
Wanneer ik dit echter kopieer binnen een echte berekeningsmethode, loopt het fout.
Situatie:
-) JFrame met menu
-) In menu een Action die files inleest en daarna een Dialog toont met informatie over deze files
Bedoeling:
-) Om tijdens het inlezen een progressbar in een dialog te tonen (of een progressmonitor)
Hieronder de code:
Ik weet dat het iets te maken heeft met treads (de main thread en de verwerkingsthread), maar het lukt mij niet om het op te lossen.
Ik heb al geprobeerd om het hele gedeelte in een inner class (die runnable implementeert) te steken. Ik heb ook al geprobeerd om enkel het frame in een inner class te steken, maar dan heb ik problemen met die final declaration.
Maar ik ben er maar op los aant gokken zonder echt te weten wat ik doe.
De voorbeelden op internet maken veel gebruik van een timer en worden vaak opgeropen vanuit de statische main methode. Als ik deze laat runnen, werken deze voorbeelden perfect.
Wanneer ik dit echter kopieer binnen een echte berekeningsmethode, loopt het fout.
Situatie:
-) JFrame met menu
-) In menu een Action die files inleest en daarna een Dialog toont met informatie over deze files
Bedoeling:
-) Om tijdens het inlezen een progressbar in een dialog te tonen (of een progressmonitor)
Hieronder de code:
Code:
public something getSupportedFiles(File f) {
/* copy paste code uit een voorbeeld */
final ProgressBarExample it = new ProgressBarExample();
JFrame frame = new JFrame("Progress Bar Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(it);
frame.pack();
frame.setVisible(true);
ArrayList<File> files = getAllFiles(f);
for (int i = 0; i < files.size(); i++) {
try {
//Berekeningen
} catch (Exception e) {
e.printStackTrace();
System.out.println("ERROR WITH FILE: "
+ files.get(i).getName());
}
final int percent = i;
try {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
it.updateBar(percent);
}
});
} catch (Exception e) {
}
}
return something;
}
Code:
public class ProgressBarExample extends JPanel {
JProgressBar pbar;
static final int MY_MINIMUM=0;
static final int MY_MAXIMUM=100;
public ProgressBarExample() {
pbar = new JProgressBar();
pbar.setMinimum(MY_MINIMUM);
pbar.setMaximum(MY_MAXIMUM);
add(pbar);
}
public void updateBar(int newValue) {
pbar.setValue(newValue);
}
}
Ik weet dat het iets te maken heeft met treads (de main thread en de verwerkingsthread), maar het lukt mij niet om het op te lossen.
Ik heb al geprobeerd om het hele gedeelte in een inner class (die runnable implementeert) te steken. Ik heb ook al geprobeerd om enkel het frame in een inner class te steken, maar dan heb ik problemen met die final declaration.
Maar ik ben er maar op los aant gokken zonder echt te weten wat ik doe.

