Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    splashscreen strano ma molto strano

    ragazzi ho un problema
    ho una classe splashscreen
    codice:
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
    
    /**
     *
     * @author Mirco
     */
    // SplashScreen.java
    //
    import java.awt.*;
    import javax.swing.*;
    public class SplashScreen extends JWindow {
    private int duration;
    public SplashScreen(int d) {
    duration = d;
    }
    // A simple little method to show a title screen in the center of the screen for
    // the amount of time given in the constructor
    public void showSplash() {
    JPanel content = (JPanel)getContentPane( );
    content.setBackground(Color.white);
    // Set the window's bounds, centering the window.
    int width = 550;
    int height =250;
    Dimension screen = Toolkit.getDefaultToolkit( ).getScreenSize( );
    int x = (screen.width-width)/2;
    int y = (screen.height-height)/2;
    setBounds(x,y,width,height);
    // Build the splash screen.
    JLabel label = new JLabel(new ImageIcon("prova.jpg"));
    JLabel copyrt = new JLabel("connet Mirco", JLabel.CENTER);
    copyrt.setFont(new Font("Sans-Serif", Font.BOLD, 12));
    content.add(label, BorderLayout.CENTER);
    content.add(copyrt, BorderLayout.SOUTH);
    Color oraRed = new Color(156, 20, 20, 255);
    content.setBorder(BorderFactory.createLineBorder(oraRed, 10));
    // Display it.
    setVisible(true);
    // Wait a little while, maybe while loading resources.
    try { Thread.sleep(duration); } catch (Exception e) {}
    setVisible(false);
    }
    public void showSplashAndExit( ) {
    showSplash( );
    dispose();
    }
    
    }
    fin qui tutto ok

    poi ho un altra classe di nome Chose con il seguente main
    codice:
     public static void main(String args[]) {
            java.awt.EventQueue.invokeLater(new Runnable() {
                public void run() {
                    SplashScreen splash = new SplashScreen(10000);
                    splash.showSplashAndExit( );
                    
                    Chose f = new Chose();
                    Dimension screenSize = Toolkit.getDefaultToolkit ().getScreenSize ();
                    
                    Dimension frameSize = f.getSize ();
                    f.setLocation ((screenSize.width - frameSize.width) / 2,
                    (screenSize.height - frameSize.height) / 2);
                    
                    f.show();
                    f.loginFalse();
    non mi da nessuno errore ma quando lancio il programma non mi viene visualizzato lo splashscreen cioè per 10 secondi il tempo del timer non si vede nulla e poi compare il mio frame chose come nel main... ho controllato il percorso della mia immagine ed il nome ed è tutto ok.. poi se faccio partire la classe splashscreen da sola senza richiamarla da chooser cioè con un main interno ad essa funziona benissimo. cosa sbaglio raga?

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: splashscreen strano ma molto strano

    Originariamente inviato da Mircodj
    non mi da nessuno errore ma quando lancio il programma non mi viene visualizzato lo splashscreen cioè per 10 secondi il tempo del timer non si vede nulla e poi compare il mio frame
    Non è nulla di "strano" ... semplicemente dovresti capire meglio come funzionano AWT/Swing per quanto riguarda i thread.

    Le interfacce utente AWT/Swing non sono "thread safe", tutti i componenti vanno gestiti solo nel contesto di un thread ben preciso che è il EDT (event dispatch thread). Questo thread è quello che si occupa di dispacciare gli eventi ai listener ma anche di invocare i vari metodi dedicati al disegno della interfaccia utente e dei componenti.

    Tu invochi invokeLater() di EventQueue per far eseguire un pezzetto di codice nel contesto del EDT. Quando sei nel contesto del EDT, puoi accedere in modo "safe" a tutti i componenti della interfaccia utente. Ma attenzione, affinché le modifiche a livello visuale siano applicate, il controllo deve ritornare al framework, il quale sempre nel contesto del EDT, si occuperà es. di aprire finestre, disegnare componenti, notificare altri listener, ecc....

    Nella tua classe che gestisce lo splash screen, hai sospeso il thread con un sleep(). Stai bloccando il EDT, oltretutto anche per troppo tempo. Dopodiché nascondi la finestra.

    Quando il controllo ritorna al framework .... non c'è più nulla da aprire o disegnare per quanto riguarda la tua finestra!!!

    Quindi non è l'approccio corretto.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    capisco quindi tutta la classse non va bene cosi come la uso? e poi puoi farmi un esempio per farmi capire la differenza in modo da vedere e capire come correggere i mie errori futuri... grazie
    codice:
    try { Thread.sleep(duration); } catch (Exception e) {}
    setVisible(false);
    }
    quindi sbaglio qualcosa qui... non capisco bene
    mille cmq

  4. #4

  5. #5

  6. #6
    andbin puoi aiutarmi per favore

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 © 2025 vBulletin Solutions, Inc. All rights reserved.