Avatar billede muingaza Nybegynder
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?
Avatar billede arne_v Ekspert
14. juni 2010 - 22:05 #1
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().
Avatar billede muingaza Nybegynder
14. juni 2010 - 22:15 #2
Det virker umiddelbart som en bug. Det burde da være muligt at lave ej JOptionPane efterfulgt af en JFileChooser?
Avatar billede arne_v Ekspert
15. juni 2010 - 01:44 #3
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.
Avatar billede muingaza Nybegynder
15. juni 2010 - 02:06 #4
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.
Avatar billede arne_v Ekspert
15. juni 2010 - 02:22 #5
Jeg betragter noget med en JFrame som en rigtig GUI app.
Avatar billede muingaza Nybegynder
15. juni 2010 - 09:17 #6
Ok så det du mener er at man eksempelvis bør extende JFrame og så bruge den som "baseholder" for alle ens vinduer?
Avatar billede arne_v Ekspert
15. juni 2010 - 15:31 #7
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.
Avatar billede arne_v Ekspert
04. juli 2010 - 03:16 #8
OK ?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester