14. juni 2010 - 21:56
Der er
8 kommentarer
Kode terminere ikke
Nedenstående kode terminere ikke når jeg kører den fra eclipse: 1) public static void main(String[] args) { Runnable runner = new Runnable() { public void run() { JOptionPane.showMessageDialog(null, "Specify inputFile", "Message", JOptionPane.INFORMATION_MESSAGE); JFileChooser fc = new JFileChooser(); int returnVal = fc.showOpenDialog(new JPanel()); } }; SwingUtilities.invokeLater(runner); } Men det gør begge nedenstående eksempler: 2) public static void main(String[] args) { Runnable runner = new Runnable() { public void run() { //JOptionPane.showMessageDialog(null, "Specify inputFile", "Message", //JOptionPane.INFORMATION_MESSAGE); JFileChooser fc = new JFileChooser(); int returnVal = fc.showOpenDialog(new JPanel()); } }; SwingUtilities.invokeLater(runner); } 3) public static void main(String[] args) { Runnable runner = new Runnable() { public void run() { JOptionPane.showMessageDialog(null, "Specify inputFile", "Message", JOptionPane.INFORMATION_MESSAGE); //JFileChooser fc = new JFileChooser(); //int returnVal = fc.showOpenDialog(new JPanel()); } }; SwingUtilities.invokeLater(runner); } Hvad kan det være at 1) ikke terminere?
Annonceindlæg fra Kingston Technology
Der sker vel et eller andet skummelt med event traaden. Jeg gaetter paa at det altid virker hvis du lave en JFrame, tilknyttede dine dialoger til den og til sidst fik kaldt dispose paa den. Alternativt kunne du vaere grov og kalde System.exit().
Det virker umiddelbart som en bug. Det burde da være muligt at lave ej JOptionPane efterfulgt af en JFileChooser?
Tja. Du bruger nogle GUI funktioner i en app som ikke er en rigtig GUI app. Det kan sikkert godt give nogle sjove effekter. Foelgende virker hos mig: JFrame f = new JFrame(); JOptionPane.showMessageDialog(null, "Specify inputFile", "Message", JOptionPane.INFORMATION_MESSAGE); JFileChooser fc = new JFileChooser(); JPanel p = new JPanel(); f.add(p); int returnVal = fc.showOpenDialog(p); f.dispose(); Her haenger JPanel paa en JFrame og JFrame bliver disposet.
Ok men hvordan vil du foreslå at konvertere ovenstående til en "rigtig" gui-app? Og hvad definere du som en rigtig gui-app? Jeg har sørget for at bruge: SwingUtilities.invokeLater(runner); og kun oprette swing objekter med event dispatch tråden så jeg vil da mene at det er et meget godt eksempel på en gui-app.
Jeg betragter noget med en JFrame som en rigtig GUI app.
Ok så det du mener er at man eksempelvis bør extende JFrame og så bruge den som "baseholder" for alle ens vinduer?
Enten bruge en JFrame eller extende JFrame. Det er standard i Swing programmer. JFrame er den yderste og holder formentligt en del af GUI setup. Man kunne naturligvis godt argumentere for at enten skal det virke uden JFrame eller saa skal man have en fejlbesked. Men ting virker ofte bedst hvis man goer tingene ligesom alle andre i.s.f. at gaa nye veje.
Kurser inden for grundlæggende programmering