Visualizzazione dei risultati da 1 a 5 su 5

Discussione: [Java]Thread

  1. #1

    [Java]Thread

    Ho un'applicazione swing che durante il caricamento mostra una splashWin. Questa splashWin (JWindow) viene mostrata istanziando e eseguendo un thread apposito.
    Il metodo run cicla ad intervalli di 500 ms valutando una proprietà del thread e ad esecuzione conclusa provvede a chiudere e impostare a null la finestra.
    Una volta partita l'applicazione quindi non vedo più la spalshWin che compare xò quando apro un JDialog o simile. Pensavo che fosse qualche oggetto .. "appeso" e che la finestra non fosse effettivamente chiusa e il thread concluso .. ma fatti i dovuti controlli .. non sembra questo... soluzioni?? suggerimenti??

    grazie.
    ► ☺ ◄

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,303
    Mah... prova a postare un po' di codice, vediamo se si riesce a capire se c'è qualcosa che non va.
    Se risulta troppo lungo il codice, cerca di omettere le parti inutili alla trattazione del problema, sostituendole con un commento esplicativo.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    non ho il codice sottomano ora .. provo a ricostruirlo.. è abbastanza banale.

    codice:
    public class SplashFact{
      static SplashWin splash=null;
    
      public static SplashWin getSplashWin(){
         if(splash==null){
            splash=new SplashWin();
            splash.start();
         }
         return splash;
      }
    }
    
    public class SplashWin extends Thread{
      SplashWnd splash=null;
    
      public void run(){
         if(splash==null){
            splash = new SplashWnd();
            // istanzia e visualizza la JWindow.
         }
         while(splash!=null){
            //elaborazione
            try{
            sleep(500);
            }catch(InterruptedException iEx){iEx.printStackTrace();}
         }
         
      }
    
      public void next(){
         // elaboro alcuni compenti di SplashWnd
      }
    
      public void close(){
         // imposto a null tutti i componenti di SplashWnd
         splash.setVisible(false);
         // provato anche dispose();
         splash=null;       
      }
    
    }
    
    public class Start{
      
      public static void main(String[] args){
         SplashFact.getSplashWin();
         /*
         * istanzio un Form MDI e nell'elaborazione
         * in vari punti utilizzo la chiamata 
         * SplashFact.getSplashWin().next()
         */
         SplashFact.getSplashWin().close();
      }
    }

    per quel che ho visto la splashWin viene caricata correttamente... cicla in modo corretto e effettua il close() in modo corretto.. trovando il null esce dal while e termina il run().
    A questo punto sul form MDI premo un polsante che apre il JDialog...
    compare la finestra dialog ma insieme a questa compare l'immagine della splashWin nel suo ultimo stato.
    Non ho moltissima esperienza sui thread ma non mi sembra di aver scritto bestialità...
    ► ☺ ◄

  4. #4
    up :master:
    ► ☺ ◄

  5. #5
    Problema risolto.
    ► ☺ ◄

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.