a) kein swing in threads außer im dispatcherThread -> EventQueue.invokeLater/invokeAndWait
b) in welcher zeile bleibt er denn hängen?
c) wieso machst du das in nem eigenen thread? das ist nun wirklich kein code mit langer laufzeit den man außlagern sollte, außerdem a)
Bekomme das nicht hin... könnte mir jmd. kurz eine classe erstellen welche in einem eigenständigen Thread läuft? Bzw. die oben so abändern, dass es funktioniert?
Aber ich verstehe nicht ganz wieso du nicht einfach die Progressbar instanziierst ohne einen Thread...
Das sollte doch dein Programm hinbekommen ein zusätzliches Fenster zu öffnen und trotzdem weiterzuarbeiten?
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JProgressBar;
public class test extends JFrame
{
private JFrame framebar;
private JProgressBar bar;
private JButton but;
public test()
{
new JFrame("Main");
but = new JButton();
add(but);
setSize(600, 400);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocation(100,100);
}
public void doBar()
{
framebar = new JFrame("Bar");
bar = new JProgressBar();
bar.setIndeterminate(true);
bar.setSize(50 , 330);
bar.setVisible(true);
framebar.add(bar);
framebar.pack();
framebar.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
framebar.setVisible(true);
}
public static void main(String[] args)
{
test t = new test();
t.doBar();
}
}
Ich würde an deiner Stelle noch den Code für die Bar in eine eigene Klasse auslagern, ist schöner, dann kannste immer ein Objekt dafür instanziieren.
Also ich würde sagen du kannst in dem hauptfenster noch weiterarbeiten oder? ^^
...
private JFrame framebar;
private JOptionPane mypane;
...
public void doPane()
{
mypane = new JOptionPane();
framebar = new JFrame("Bar");
framebar.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
framebar.add(mypane);
framebar.pack();
framebar.setVisible(true);
}
Zu deinem Verständnis, ich hab die JoptionPane in das JFrame gelegt und damit kann es der User nicht schließen...
Auch wieder hier nen Tip leg das alles in eine eigenen Klasse und somit hast du deine eigene nichtschließbare JOptionPane.
Ich hätte es trotzdem mit der Progressbar gemacht, deutlich schöner!
Gast, ich denke du hast ein grundsätzliches problem, nämlich dass deine berechnung im dispatcherThread läuft. der dispatcherThread ist u.a. dafür zuständig fenster neu zu zahlen. wenn du diesen thread blockierst kannst du noch so viele joptionpanes/fenster/progressbars /...erstellen wie du willst, du wirst nichts sehen
--> lager doch einfach deine berechnung in einen extra thread aus?!