/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
JDialog problemer
Fra : Soren Smidt Hansen


Dato : 17-12-02 11:18

Hejsa

Jeg har et problem med JDialog. Jeg vil gerne lave en dialog med en
progressbar. Jeg har skrevet foelgende kode:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

public class StatusDialog extends JDialog {
private int val = 0;
private JProgressBar progressBar;

public StatusDialog(Frame frame) {
   super(frame, true);

   progressBar = new JProgressBar(0, 14);
   progressBar.setValue(val);
   progressBar.setStringPainted(true);

   this.getContentPane().add(progressBar);
   progressBar.setVisible(true);

   this.setSize(new Dimension(200, 100));
   this.setLocation(500, 400);

   this.setVisible(true);
}
}

Dette viser fint dialogen med baren i, men den kaldende metode
blokkerer indtil dialogen lukkes, hvilket jeg ikke oensker. Hvis jeg
saa i stedet bruger super(frame, false), blokkerer den kaldende metode
ikke, men dialogen viser ikke laengere progressbaren.

Er der nogen, der kan fortaelle mig, hvordan jeg soerger for at den
kaldende metode ikke blokkerer samtidig med at dialogen tegner sine
komponenter?

Btw: Jeg bruger J2SDK 1.4.0_01 til linux under Gnome

Paa forhaand tak.

--
Mvh Søren Smidt Hansen
sosh@daimi.au.dk
tlf: 51235821
http://www.daimi.au.dk/~sosh

 
 
Soren Smidt Hansen (17-12-2002)
Kommentar
Fra : Soren Smidt Hansen


Dato : 17-12-02 23:49

[snip en masse]

Jeg har kogt problemet ned til foelgende program:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

public class TestApp {
class MyDialog extends JDialog {
   public MyDialog(Frame frame, String title) {
    super(frame, title, false);
    this.getContentPane().setLayout(new BorderLayout(15, 15));
    JLabel label = new JLabel("Hello, World");
    this.getContentPane().add("Center", label);
    this.pack();
    this.setVisible(true);
   }
}
JFrame frame = new JFrame();
public TestApp() {
   JButton but = new JButton("bla");
   but.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
       butClick();
      }
    });
   frame.getContentPane().add(but);
   frame.setSize(new Dimension(300, 300));
   frame.setLocation(200, 200);
   frame.setVisible(true);
   butClick();
   try {
    Thread.sleep(1000);
   } catch (Exception e) {}
}
public static void main(String[] args) {
   new TestApp();
}
public void butClick() {
   MyDialog md = new MyDialog(frame,"title");
   try {
    Thread.sleep(1000);
   } catch (Exception e) {}
}
}

Her vises et frame med en knap. Derudover vises en instans af MyDialog
fint. Hvis man saa trykker paa knappen, vises en instans af MyDialog,
men den label der er i MyDialog vises foerst efter et sekund, naar
butClick afsluttes.

Jeg ville specielt gerne have, at dialogen kunne vises samtidig med,
at den kaldende metode koerer videre. Jeg kan ikke umiddelbart se, at
der er nogen forskel paa de to instantieringer af MyDialog, saa
problemet maa vel vaere et andet sted.

--
Mvh Søren Smidt Hansen
sosh@daimi.au.dk
tlf: 51235821
http://www.daimi.au.dk/~sosh

Bjørn Jeberg (19-12-2002)
Kommentar
Fra : Bjørn Jeberg


Dato : 19-12-02 11:44

"Soren Smidt Hansen" <sosh@daimi.au.dk> wrote in message
news:xm6fzswgt1u.fsf@alex.daimi.au.dk...
> [snip en masse]
>
> Jeg har kogt problemet ned til foelgende program:
>

[snip endnu mere]

>
> Her vises et frame med en knap. Derudover vises en instans af MyDialog
> fint. Hvis man saa trykker paa knappen, vises en instans af MyDialog,
> men den label der er i MyDialog vises foerst efter et sekund, naar
> butClick afsluttes.
>
> Jeg ville specielt gerne have, at dialogen kunne vises samtidig med,
> at den kaldende metode koerer videre. Jeg kan ikke umiddelbart se, at
> der er nogen forskel paa de to instantieringer af MyDialog, saa
> problemet maa vel vaere et andet sted.
>
> --
> Mvh Søren Smidt Hansen
> sosh@daimi.au.dk
> tlf: 51235821
> http://www.daimi.au.dk/~sosh

Ja, det er den slags ting med Swing der nogle gange kan drive en til vanvid.
Det skyldes gerne en manglende thread. Prøv noget i denne stil:

JButton but = new JButton("bla");
but.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
(new Thread(
new Runnable() {
public void run() {
butClick();
}
})).start();
}
});

Mvh Bjørn Jeberg




Soren Smidt Hansen (19-12-2002)
Kommentar
Fra : Soren Smidt Hansen


Dato : 19-12-02 12:55

"Bjørn Jeberg" <bjj@finans<-->system.dk> writes:

[snip]
> Ja, det er den slags ting med Swing der nogle gange kan drive en til vanvid.
> Det skyldes gerne en manglende thread. Prøv noget i denne stil:
>
> JButton but = new JButton("bla");
> but.addActionListener(
> new ActionListener() {
> public void actionPerformed(ActionEvent e) {
> (new Thread(
> new Runnable() {
> public void run() {
> butClick();
> }
> })).start();
> }
> });

Du har ret, det var ogsaa det, jeg fandt ud af. Jeg kan henlede
opmaerksomheden paa Foxtrot projektet, som ligger paa Sourceforge. De
tilgaar praecis dette problem.

--
Mvh Søren Smidt Hansen
sosh@daimi.au.dk
tlf: 51235821
http://www.daimi.au.dk/~sosh

Søg
Reklame
Statistik
Spørgsmål : 177492
Tips : 31966
Nyheder : 719565
Indlæg : 6408466
Brugere : 218886

Månedens bedste
Årets bedste
Sidste års bedste