Következő a problémám. Írtam egy pici programot amiben egy gomb megnyomására elindul egy folyamat Azt szeretném megoldani, hogy amíg ez a feladat be nem fejeződik megjelenjen egy modális folyamatjelző.
A feladat elég sok lépésből áll, valami olyan megoldás lenne jó ami nem százalékosan jeleníti meg a folyamat állapotát, hanem csak jelzi, hogy dolgozik a program, ide-oda fut egy csík mondjuk vagy vmi hasonló.
Mi ennek a feladatnak az általános és elegáns megoldása? A 'run' metóduson belül hozzam létre a progressbart? ahol a szál ténylegesen végrehajtódik?
A program felépítése a következő képen néz ki:
public MyApp extends JFrame implements ActionListener, ItemListener {
deklarációk...
metódusok..
stb..
eseménykezelés, a gomb megnyomására elindul a feladat végrehajtása
public void actionPerformed(ActionEvent ev){
if (ev.getSource() == gomb) {
Feladat ft;
Thread th;
ft = new Feladat();
th = new Thread(ft);
th.start();
}
}
class Feladat extends JDialog implements Runnable{
public void run(){
a tényleges feladat..
}
átfutottam, és megnéztem jó pár példát is, a végén meg teljesen elbizonytalanodtam a megoldást illetően, mert ahány példa annyi féle megoldás és nem állt össze a kép.. :( azért bátorkodtam megkérdezni Ki, hogyan csinálja :)
ezt kellene valahogy felhasználni most, tegyem át ebbe a feladatvégrehajtást? a run() metódusban pedig PB frame = new PB(MyApp.this, true); ? vagy ez így nem az igazi?
class PB extends JDialog {
JProgressBar pbar;
public PB(JFrame parent, boolean modal) {
super(parent, modal);
init();
}
public void iterate() {
pbar.setIndeterminate(true);
}
public void init() {
setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
JPanel pane = new JPanel();
pbar = new JProgressBar(JProgressBar.HORIZONTAL,
0, 1000);
pbar.setIndeterminate(true);
pane.add(pbar);
setContentPane(pane);
pack();
setVisible(true);
iterate();
}
}
Bocs így tényleg átláthatatlan.. remélem most jobb lesz. a picit viszont idézőjelbe teszem, bemásolni az egészet nagyon sok lenne és nem is lenne értelme azért írtam le csak a felépítését.
public MyApp extends JFrame implements ActionListener, ItemListener {
deklarációk..
public MyApp() { sw = new SplahWindow(this, 3000); init(); }
private void init() { A GUI összeállítása }
metódusok..
private void writePrefs(){}
private void readPrefs(){}
nyomtatás, keresés stb..
eseménykezelés részlet, a gomb megnyomására elindul a feladat végrehajtása
public void actionPerformed(ActionEvent ev){ if (ev.getSource() == gomb) { Feladat ft; Thread th; ft = new Feladat(); th = new Thread(ft); th.start(); } }
class Feladat extends JDialog implements Runnable{ public void run(){ a tényleges feladat ami több részből áll, amíg ez fut szeretném, hogy megjelenjen egy folyamatjelző }
}
class PB extends JDialog {
JProgressBar pbar;
public PB(JFrame parent, boolean modal) { super(parent, modal); init(); }
public void iterate() { pbar.setIndeterminate(true); }
public void init() { setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE); JPanel pane = new JPanel(); pbar = new JProgressBar(JProgressBar.HORIZONTAL, 0, 1000); pane.add(pbar); setContentPane(pane); pack(); setVisible(true); iterate(); } } }
public void lineAdd() { for (int i = 10000, b = 0; b <= i; b++) { jt.append(System.getProperty("line.separator")); jt.append(b + ". " + "sor"); } }
public void actionPerformed(ActionEvent e) { if (e.getSource() == bt) { StartFeladat ft; Thread th; ft = new StartFeladat(); th = new Thread(ft); th.start(); } }
public void lineAdd() { progress = new MyProgress(); for (int i = 4000, b = 0; b <= i; b++) { jt.append(System.getProperty("line.separator")); jt.append(b + ". " + "sor"); for (int j = 0; j < 300000; j++) {} } progress.dispose(); }
public void actionPerformed(ActionEvent e) { if (e.getSource() == bt) { StartFeladat ft; Thread th; ft = new StartFeladat(); th = new Thread(ft); th.start(); } }