Gå til innhold

loading vindu mens oppkobling til db


Anbefalte innlegg

Jeg skal lage et vindu som kommer opp mens brukeren venter på å få koblet seg til databasen. Det skal bare stå "vent litt" eller noe slikt. Slik det er nå så kommer vinduet frem, men ingenting inne i vinduet vises. Noen som vet hvordan dette kan gjøres?

Lenke til kommentar
Videoannonse
Annonse

nå har jeg prøvd å gjøre det i en tråd. Her er litt av koden:

 

public loading(String tittel) {

setTitle(tittel) ;

setAlwaysOnTop(true) ;

Thread traad = new Thread(this) ;

traad.start() ;

}

 

public void run() {

makeGui() ;

}

 

makeGui() er metoden som setter inn teksten. Problemet er fortsatt at det ikke kommer noen tekst i vinduet, noen tips til hva som kan være feilen?

Lenke til kommentar

Den er egentlig grei, sånn her er det jeg har satt det opp i selve innloggingsprogrammet:

else if(ae.getSource() == okKnapp || ae.getSource() == txtPassord) {

loader = new loading("Kobler til databasen") ;

 

Så når man trykker på knappen så skal det loadevinduet komme frem.

Her er en liten del av hva som skjer når det lages ny loader klasse:

public loading(String tittel) {

setTitle(tittel) ;

setAlwaysOnTop(true) ;

//Thread traad = new Thread(this) ;

//traad.start() ;

makeGui() ;

}

 

Det som er kommentert ut er bare litt tidligere forsøk, slik den står nå så kommer ikke vinduet opp i det hele tatt. Hvis jeg tar å bruker de setningene som er kommentert ut så kommer vinduet frem men selve innholdet i vinduet kommer ikke frem.

Lenke til kommentar

ok nå har jeg laget den til runnable. Den vil fortsatt ikke vise innholdet i vinduet.

 

Jeg startert den på samme måte :

loader = new loading("Kobler til databasen") ;

 

Og run() metoden i loadingklassen ser slik ut:

public void run() {

makeGui() ;

}

 

hvor da makeGui() selvfølgelig legger inn teksten i vinduet.

Noen som vet hva som kan være feil?

Lenke til kommentar

Proev dette istedenfor:

 

loader.run();

 

Hvis dette ikke virker, saa kanskje har du gjort noe galt i makeGUI(). Er du sikker paa at du har programmert riktig? Faar du teksten til aa vises paa en annen maate, ved aa bruke f.eks. en testklasse?

Lenke til kommentar

Uten å ta med skriving og lesing til fil så er dette hva klassene inneholder.

 

Selve logon klassen hvor brukeren taster inn brukernavn og passord:

loader = new loading("Kobler til databasen") ;

new Thread(loader).start() ;

 

try {

Context ini = new InitialContext() ;

objref = ini.lookup("LoginBean") ;

}

catch(javax.naming.NamingException ne) {

ne.printStackTrace() ;

}

try {

home = (LoginHome)PortableRemoteObject.narrow(objref, LoginHome.class) ;

log = home.create() ;

}

catch(Exception ......

 

Loadingklassen implementerer runnable og ser slik ut:

public loading(String tittel) {

setTitle(tittel) ;

}

 

public void run() {

makeGui() ;

}

 

public void makeGui() {

try {

UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");

}

catch (Exception e) {

}

loader = new JLabel("Vent litt...") ;

 

setLayout(new FlowLayout()) ;

 

add(loader) ;

setSize(100, 100) ;

 

//Setter vinduet i midten av skjermen

screenSize = Toolkit.getDefaultToolkit().getScreenSize();

frameSize = this.getSize();

 

if (frameSize.height > screenSize.height) {

frameSize.height = screenSize.height;

}

if (frameSize.width > screenSize.width) {

frameSize.width = screenSize.width;

}

this.setResizable(false) ;

 

this.setLocation((screenSize.width - frameSize.width) / 2, (screenSize.height - frameSize.height) / 2) ;

 

 

setVisible(true) ;

 

 

Jeg har fått noen tips om å bruker invokelater eller invokeandwait men jeg aner ikke hvordan disse skal brukes her. Har søkt lenge på google uten å bli noe særlig klokere.

 

Tusen takk for all hjelp!

Endret av TeddyErt
Lenke til kommentar

import java.awt.Font;
import java.awt.Window;
import java.awt.Frame;
import javax.swing.JLabel;

public class Balle{
   
   public static void main(String[] args) throws InterruptedException{     
       loading loader = new Balle().new loading();
       System.out.println("Går og driter jeg");
       new Thread(loader).start();                   
       // her kan vi gjør mye rart i stedet for å sove
       Thread.sleep(5000);
       System.out.println("Ferdig");
       loader.dispose();        
   }
   
   class loading extends Frame implements Runnable{  
       public void run(){
           makeGui();
       }
       
       public void makeGui(){
           Window win = new Window(this);
           JLabel en = new JLabel("Dette er jammen godt");
           en.setFont(new Font("Helvetica", Font.BOLD,14));
           win.add(en);
           win.setSize(200,200);
           win.setLocation(200,200);
           win.setVisible(true);          
       }      
   }
}

 

Det er ikke noe problem å bytte ut Window med JFrame, hvis du ønsker en titlebar.

Lenke til kommentar

problemet blir det samme for der du har skrevet

// her kan vi gjør mye rart i stedet for å sove

Thread.sleep(5000);

 

Har jeg dette:

home = (LoginHome)PortableRemoteObject.narrow(objref, LoginHome.class) ;

log = home.create() ;

 

Noe som gjør at hele greia henger seg og ikke viser innholdet i loadingvinduet.

 

Har søkt veldig mye rundt på nettet og funnet noe som heter progressmonitor. Har ikke fått dette til å fungere enda, noen som har erfaringer med dette?

Endret av TeddyErt
Lenke til kommentar
problemet blir det samme for der du har skrevet

// her kan vi gjør mye rart i stedet for å sove

Thread.sleep(5000);

 

Har jeg dette:

home = (LoginHome)PortableRemoteObject.narrow(objref, LoginHome.class) ;

log = home.create() ;

 

Noe som gjør at hele greia henger seg og ikke viser innholdet i loadingvinduet.

Dette har ikke noe si. Ganske enkelt fordi det skjer i en annen tråd.

 

En annen sak er at dispose aldri blir kalt hvis programmet ditt ikke kommer så langt.

Lenke til kommentar

Den kommer ned til dispose, men mens den kobler seg opp så vil ikke vinduet vise innholdet. Det kommer et helt blankt vindu opp, eneste som den viser riktig er setTitle. Selve innholdet,her en JLabel, vises ikke. Også når tilkoblingen er klar så lukkes loading vinduet.

Endret av TeddyErt
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...