IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

Instancier un objet Swing en parallèle


Sujet :

AWT/Swing Java

  1. #1
    Membre habitué Avatar de CLeBeR
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 412
    Points : 188
    Points
    188
    Par défaut Instancier un objet Swing en parallèle
    Bonjour,
    j'ai deux classes qui me servent à initialiser une communication (client) et un navigateur. Je souhaiterais à partir de la classe Client lancer l'objet Navigateur dont la classe étend de JFrame. Je n'ai aucune erreur de code avec ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        public static void main(String[] args) throws Exception {
            Client client = new Client();
            client.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            client.frame.setVisible(true);
            client.run();
     Navigateur navigateur = new Navigateur();
                    navigateur.setVisible(true);
        }
    }
    Le problème c'est que mon Navigateur ne s'instancie pas. Je me suis dit que ça devait être un problème de blocage de thread. Je me suis donc mis à lire ce cours sur les threads en Java et j'ai donc modifié mon code comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
        public static void main(String[] args) throws Exception {
            Client client = new Client();
            client.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            client.frame.setVisible(true);
            client.run();
            Thread OuvertureNavigateur = new Thread() {
                public void run() {
                    Navigateur navigateur = new Navigateur();
                    navigateur.setVisible(true);
                }
            };
            OuvertureNavigateur.start();
        }
    }
    Mon navigateur ne se lance toujours pas. Ce que je ne comprends pas c'est que dans la classe Navigateur, ce dernier est invoqué en Runnable. Il ne devrait donc pas être bloquant ?
    J'espère que vous pourrez m'aider.
    A+
    Pensez à voter pour une réponse qui vous aide ou pour une personne insolente !
    Si votre sujet est résolu, cliquez sur le bouton !

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    C'est quoi le code du constructeur de Navigateur ?
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre habitué Avatar de CLeBeR
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 412
    Points : 188
    Points
    188
    Par défaut
    Salut joel.drigo,
    j'ai mis un lien cliquable vers la classe dans mon premier message pour éviter de vous copier/coller toute la classe. Voici donc uniquement le code du main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
        public static void main(String[] args) {
            UIUtils.setPreferredLookAndFeel();
            NativeInterface.open();
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    JFrame frame = new JFrame("DJ Native Swing Test");
                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    frame.getContentPane().add(new Navigateur(), BorderLayout.CENTER);
                    frame.setSize(800, 600);
                    frame.setLocationByPlatform(true);
                    frame.setVisible(true);
                }
            });
            NativeInterface.runEventPump();
        }
    Merci de ton aide
    Pensez à voter pour une réponse qui vous aide ou pour une personne insolente !
    Si votre sujet est résolu, cliquez sur le bouton !

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Oui, mais je n'ai pas vraiment envie de charger un code depuis un autre site. Mais je vois que dans la méthode main tu fais référence à DJNative, un composant basé sur SWT, en y vois qu'on utilise un invokeLater, pour forcer l'instanciation dans l'Event Dispatch Thread. Essaye tout simplement de remplacer ton thread par une exécution sur l'EDT :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public static void main(String[] args) throws Exception {
            Client client = new Client();
            client.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            client.frame.setVisible(true);
            client.run();
           SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    Navigateur navigateur = new Navigateur();
                    navigateur.setVisible(true);
                }
            });
        }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre habitué Avatar de CLeBeR
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 412
    Points : 188
    Points
    188
    Par défaut
    Ok pas de soucis, je te colle toute la classe alors comme ça tu pourras voir. La solution que tu m'as donnée ne fonctionne pas.
    La classe Client :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.PrintWriter;
    import java.net.Socket;
     
    import javax.swing.JFrame;
    import javax.swing.JOptionPane;
    import javax.swing.JScrollPane;
    import javax.swing.JTextArea;
    import javax.swing.JTextField;
     
    /**
     * A simple Swing-based client for the chat server.  Graphically
     * it is a frame with a text field for entering messages and a
     * textarea to see the whole dialog.
     *
     * The client follows the Chat Protocol which is as follows.
     * When the server sends "SUBMITNAME" the client replies with the
     * desired screen name.  The server will keep sending "SUBMITNAME"
     * requests as long as the client submits screen names that are
     * already in use.  When the server sends a line beginning
     * with "NAMEACCEPTED" the client is now allowed to start
     * sending the server arbitrary strings to be broadcast to all
     * chatters connected to the server.  When the server sends a
     * line beginning with "MESSAGE " then all characters following
     * this string should be displayed in its message area.
     */
    public class ChatClient {
     
        BufferedReader in;
        PrintWriter out;
        JFrame frame = new JFrame("Chatter");
        JTextField textField = new JTextField(40);
        JTextArea messageArea = new JTextArea(8, 40);
     
        /**
         * Constructs the client by laying out the GUI and registering a
         * listener with the textfield so that pressing Return in the
         * listener sends the textfield contents to the server.  Note
         * however that the textfield is initially NOT editable, and
         * only becomes editable AFTER the client receives the NAMEACCEPTED
         * message from the server.
         */
        public ChatClient() {
     
            // Layout GUI
            textField.setEditable(false);
            messageArea.setEditable(false);
            frame.getContentPane().add(textField, "North");
            frame.getContentPane().add(new JScrollPane(messageArea), "Center");
            frame.pack();
     
            // Add Listeners
            textField.addActionListener(new ActionListener() {
                /**
                 * Responds to pressing the enter key in the textfield by sending
                 * the contents of the text field to the server.    Then clear
                 * the text area in preparation for the next message.
                 */
                public void actionPerformed(ActionEvent e) {
                    out.println(textField.getText());
                    textField.setText("");
                }
            });
        }
     
        /**
         * Prompt for and return the address of the server.
         */
        private String getServerAddress() {
            return JOptionPane.showInputDialog(
                frame,
                "Enter IP Address of the Server:",
                "Welcome to the Chatter",
                JOptionPane.QUESTION_MESSAGE);
        }
     
        /**
         * Prompt for and return the desired screen name.
         */
        private String getName() {
            return JOptionPane.showInputDialog(
                frame,
                "Choose a screen name:",
                "Screen name selection",
                JOptionPane.PLAIN_MESSAGE);
        }
     
        /**
         * Connects to the server then enters the processing loop.
         */
        private void run() throws IOException {
     
            // Make connection and initialize streams
            String serverAddress = getServerAddress();
            Socket socket = new Socket(serverAddress, 9001);
            in = new BufferedReader(new InputStreamReader(
                socket.getInputStream()));
            out = new PrintWriter(socket.getOutputStream(), true);
     
            // Process all messages from server, according to the protocol.
            while (true) {
                String line = in.readLine();
                if (line.startsWith("SUBMITNAME")) {
                    out.println(getName());
                } else if (line.startsWith("NAMEACCEPTED")) {
                    textField.setEditable(true);
                } else if (line.startsWith("MESSAGE")) {
                    messageArea.append(line.substring(8) + "\n");
                }
            }
        }
     
        /**
         * Runs the client as an application with a closeable frame.
         */
        public static void main(String[] args) throws Exception {
            ChatClient client = new ChatClient();
            client.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            client.frame.setVisible(true);
            client.run();
        }
    }
    La classe Navigateur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    /*
     * Christopher Deckers (chrriis@nextencia.net)
     * http://www.nextencia.net
     *
     * See the file "readme.txt" for information on usage and redistribution of
     * this file, and for a DISCLAIMER OF ALL WARRANTIES.
     */
    package chrriis.dj.nativeswing.swtimpl.demo.examples.webbrowser;
     
    import java.awt.BorderLayout;
    import java.awt.FlowLayout;
    import java.awt.event.ItemEvent;
    import java.awt.event.ItemListener;
     
    import javax.swing.BorderFactory;
    import javax.swing.JCheckBox;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.SwingUtilities;
     
    import chrriis.common.UIUtils;
    import chrriis.dj.nativeswing.swtimpl.NativeInterface;
    import chrriis.dj.nativeswing.swtimpl.components.JWebBrowser;
     
    /**
     * @author Christopher Deckers
     */
    public class SimpleWebBrowserExample extends JPanel {
     
      public SimpleWebBrowserExample() {
        super(new BorderLayout());
        JPanel webBrowserPanel = new JPanel(new BorderLayout());
        webBrowserPanel.setBorder(BorderFactory.createTitledBorder("Native Web Browser component"));
        final JWebBrowser webBrowser = new JWebBrowser();
        webBrowser.navigate("http://www.google.com");
        webBrowserPanel.add(webBrowser, BorderLayout.CENTER);
        add(webBrowserPanel, BorderLayout.CENTER);
        // Create an additional bar allowing to show/hide the menu bar of the web browser.
        JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.CENTER, 4, 4));
        JCheckBox menuBarCheckBox = new JCheckBox("Menu Bar", webBrowser.isMenuBarVisible());
        menuBarCheckBox.addItemListener(new ItemListener() {
          public void itemStateChanged(ItemEvent e) {
            webBrowser.setMenuBarVisible(e.getStateChange() == ItemEvent.SELECTED);
          }
        });
        buttonPanel.add(menuBarCheckBox);
        add(buttonPanel, BorderLayout.SOUTH);
      }
     
      /* Standard main method to try that test as a standalone application. */
      public static void main(String[] args) {
        UIUtils.setPreferredLookAndFeel();
        NativeInterface.open();
        SwingUtilities.invokeLater(new Runnable() {
          public void run() {
            JFrame frame = new JFrame("DJ Native Swing Test");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.getContentPane().add(new SimpleWebBrowserExample(), BorderLayout.CENTER);
            frame.setSize(800, 600);
            frame.setLocationByPlatform(true);
            frame.setVisible(true);
          }
        });
        NativeInterface.runEventPump();
      }
     
    }
    Pensez à voter pour une réponse qui vous aide ou pour une personne insolente !
    Si votre sujet est résolu, cliquez sur le bouton !

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Hum, pourquoi la classe Navigateur s'appellerait SimpleWebBrowserExample ?

    Quand tu dis que Navigateur ne s'instancie pas, c'est que tu ne vois pas ta fenêtre avec navigateur, ou que ça cause une exception ?

    Dans le premier cas, en mode debug, essaye de voir où ça bloque. Dans le second, quelle est la stacktrace ?

    Sinon, on voit quand même dans l'exemple 2 appels que tu n'as pas dans ton code : NativeInterface.open(); et NativeInterface.runEventPump();. Ils sont peut être utiles, voire indispensables...
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  7. #7
    Membre habitué Avatar de CLeBeR
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 412
    Points : 188
    Points
    188
    Par défaut
    Salut !
    Pourquoi la classe Navigateur s'appellerait SimpleWebBrowserExample ?
    J'ai juste changé le nom de la classe pour m'organiser dans mon projet, la classe d'origine issue des exemples du site du développeur s'appelle SimpleWebBrowserExample , le code reste exactement le même.
    Quand tu dis que Navigateur ne s'instancie pas, c'est que tu ne vois pas ta fenêtre avec navigateur, ou que ça cause une exception ?
    Je ne vois pas la fenêtre, je suis sûr que le navigateur ne se lance pas car une vidéo devrait se lancer au chargement de la classe, elle se lance toute seul lorsque compile la classe.

    Je t'ai fait une copie de ce que IntelliJ IDEA me marque en commentaire à côté du code lorsque je débug en pas à pas :
    Nom : CodeBreakPoint.PNG
Affichages : 643
Taille : 24,6 Ko

    Voilà les variables qu'il me sort pour le thread en question qui est donc bien lancé :

    args = {String[0]@448}
    OuvertureNavigateur = {Client$2@451} "Thread[Thread-0,5,]"
    name = {char[8]@2082}
    0 = 'T' 84
    1 = 'h' 104
    2 = 'r' 114
    3 = 'e' 101
    4 = 'a' 97
    5 = 'd' 100
    6 = '-' 45
    7 = '0' 48
    priority = 5
    threadQ = null
    eetop = 0
    single_step = false
    daemon = false
    stillborn = false
    target = null
    group = null
    contextClassLoader = {Launcher$AppClassLoader@450}
    inheritedAccessControlContext = null
    threadLocals = null
    inheritableThreadLocals = null
    stackSize = 0
    nativeParkEventPointer = 0
    tid = 11
    threadStatus = 2
    parkBlocker = null
    blocker = null
    blockerLock = {Object@2083}
    uncaughtExceptionHandler = null
    threadLocalRandomSeed = 0
    threadLocalRandomProbe = 0
    threadLocalRandomSecondarySeed = 0
    client = {Client@455}
    in = {BufferedReader@2020}
    out = {PrintWriter@2021}
    frame = {JFrame@1913} "javax.swing.JFrame[frame0,0,0,460x190,layout=java.awt.BorderLayout,title=Chatter,resizable,normal,defaultCloseOperation=EXIT_ON_CLOSE,rootPane=javax.swing.JRootPane[,8,31,444x151,layout=javax.swing.JRootPane$RootLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=16777673,maximumSize=,minimumSize=,preferredSize=],rootPaneCheckingEnabled=true]"
    textField = {JTextField@2022} "javax.swing.JTextField[,0,0,444x20,layout=javax.swing.plaf.basic.BasicTextUI$UpdateHandler,alignmentX=0.0,alignmentY=0.0,border=javax.swing.plaf.BorderUIResource$CompoundBorderUIResource@c8a2c0,flags=296,maximumSize=,minimumSize=,preferredSize=,caretColor=sun.swing.PrintColorUIResource[r=51,g=51,b=51],disabledTextColor=javax.swing.plaf.ColorUIResource[r=184,g=207,b=229],editable=false,margin=javax.swing.plaf.InsetsUIResource[top=0,left=0,bottom=0,right=0],selectedTextColor=sun.swing.PrintColorUIResource[r=51,g=51,b=51],selectionColor=javax.swing.plaf.ColorUIResource[r=184,g=207,b=229],columns=40,columnWidth=11,command=,horizontalAlignment=LEADING]"
    messageArea = {JTextArea@2018} "javax.swing.JTextArea[,0,0,441x128,layout=javax.swing.plaf.basic.BasicTextUI$UpdateHandler,alignmentX=0.0,alignmentY=0.0,border=javax.swing.plaf.basic.BasicBorders$MarginBorder@74868d,flags=296,maximumSize=,minimumSize=,preferredSize=,caretColor=sun.swing.PrintColorUIResource[r=51,g=51,b=51],disabledTextColor=javax.swing.plaf.ColorUIResource[r=184,g=207,b=229],editable=false,margin=javax.swing.plaf.InsetsUIResource[top=0,left=0,bottom=0,right=0],selectedTextColor=sun.swing.PrintColorUIResource[r=51,g=51,b=51],selectionColor=javax.swing.plaf.ColorUIResource[r=184,g=207,b=229],colums=40,columWidth=11,rows=8,rowHeight=16,word=false,wrap=false]"
    client.frame = {JFrame@1913} "javax.swing.JFrame[frame0,0,0,460x190,layout=java.awt.BorderLayout,title=Chatter,resizable,normal,defaultCloseOperation=EXIT_ON_CLOSE,rootPane=javax.swing.JRootPane[,8,31,444x151,layout=javax.swing.JRootPane$RootLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=16777673,maximumSize=,minimumSize=,preferredSize=],rootPaneCheckingEnabled=true]"
    defaultCloseOperation = 3
    transferHandler = null
    rootPane = {JRootPane@2087} "javax.swing.JRootPane[,8,31,444x151,layout=javax.swing.JRootPane$RootLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=16777673,maximumSize=,minimumSize=,preferredSize=]"
    rootPaneCheckingEnabled = true
    accessibleContext = null
    maximizedBounds = null
    title = {String@2088} "Chatter"
    menuBar = null
    resizable = true
    undecorated = false
    mbManagement = false
    state = 0
    ownedWindows = null
    frameSerializedDataVersion = 1
    warningString = null
    icons = null
    temporaryLostComponent = null
    syncLWRequests = false
    beforeFirstShow = false
    disposing = false
    disposerRecord = {Window$WindowDisposerRecord@2089}
    state = 1
    alwaysOnTop = false
    ownedWindowList = {Vector@2090} size = 0
    weakThis = {WeakReference@2091}
    showWithParent = false
    modalBlocker = null
    modalExclusionType = {Dialog$ModalExclusionType@2092} "NO_EXCLUDE"
    windowListener = null
    windowStateListener = null
    windowFocusListener = null
    inputContext = {InputMethodContext@2093}
    inputContextLock = {Object@2094}
    focusMgr = null
    focusableWindowState = true
    autoRequestFocus = true
    isInShow = false
    opacity = 1.0
    shape = null
    isTrayIconWindow = false
    securityWarningWidth = 0
    securityWarningHeight = 0
    securityWarningPointX = 2.0
    securityWarningPointY = 0.0
    securityWarningAlignmentX = 1.0
    securityWarningAlignmentY = 0.0
    anchor = {Object@2095}
    type = {Window$Type@2096} "NORMAL"
    windowSerializedDataVersion = 2
    locationByPlatform = false
    component = {ArrayList@2097} size = 1
    layoutMgr = {BorderLayout@2098} "java.awt.BorderLayout[hgap=0,vgap=0]"
    dispatcher = {LightweightDispatcher@2099}
    focusTraversalPolicy = {LayoutFocusTraversalPolicy@2100}
    focusCycleRoot = false
    focusTraversalPolicyProvider = false
    printingThreads = null
    printing = false
    containerListener = null
    listeningChildren = 0
    listeningBoundsChildren = 0
    descendantsCount = 14
    preserveBackgroundColor = null
    numOfHWComponents = 0
    numOfLWComponents = 14
    modalComp = null
    modalAppContext = null
    containerSerializedDataVersion = 1
    peer = {WFramePeer@2101} "sun.awt.windows.WFramePeer[javax.swing.JFrame[frame0,0,0,460x190,layout=java.awt.BorderLayout,title=Chatter,resizable,normal,defaultCloseOperation=EXIT_ON_CLOSE,rootPane=javax.swing.JRootPane[,8,31,444x151,layout=javax.swing.JRootPane$RootLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=16777673,maximumSize=,minimumSize=,preferredSize=],rootPaneCheckingEnabled=true]]"
    parent = null
    appContext = {AppContext@2102} "sun.awt.AppContext[threadGroup=system]"
    x = 0
    y = 0
    width = 460
    height = 190
    foreground = {Color@2103} "java.awt.Color[r=0,g=0,b=0]"
    background = {ColorUIResource@2104} "javax.swing.plaf.ColorUIResource[r=238,g=238,b=238]"
    font = {Font@2105} "java.awt.Font[family=Dialog,name=Dialog,style=plain,size=12]"
    peerFont = {Font@2105} "java.awt.Font[family=Dialog,name=Dialog,style=plain,size=12]"
    cursor = {Cursor@2106} "java.awt.Cursor[Curseur par défaut]"
    locale = {Locale@2107} "fr_FR"
    graphicsConfig = {D3DGraphicsConfig@2108} "D3DGraphicsConfig[dev=D3DGraphicsDevice[screen=0],pixfmt=0]"
    bufferStrategy = null
    ignoreRepaint = false
    visible = true
    enabled = true
    valid = true
    dropTarget = null
    popups = null
    name = {String@2109} "frame0"
    nameExplicitlySet = false
    focusable = true
    isFocusTraversableOverridden = 1
    focusTraversalKeys = null
    focusTraversalKeysEnabled = true
    acc = {AccessControlContext@2110}
    minSize = null
    minSizeSet = false
    prefSize = null
    prefSizeSet = false
    maxSize = null
    maxSizeSet = false
    componentOrientation = {ComponentOrientation@2111}
    newEventsOnly = true
    componentListener = null
    focusListener = null
    hierarchyListener = null
    hierarchyBoundsListener = null
    keyListener = null
    mouseListener = null
    mouseMotionListener = null
    mouseWheelListener = null
    inputMethodListener = null
    windowClosingException = null
    eventMask = 4168
    changeSupport = null
    objectLock = {Object@2112}
    isPacked = true
    boundsOp = 3
    compoundShape = null
    mixingCutoutRegion = null
    isAddNotifyComplete = true
    backgroundEraseDisabled = false
    eventCache = {EventQueueItem[5]@2113}
    coalescingEnabled = false
    autoFocusTransferOnDisposal = true
    componentSerializedDataVersion = 4
    accessibleContext = null
    Et voici le thread report :

    "AWT-EventQueue-0@1586" prio=6 tid=0x13 nid=NA waiting
    java.lang.Thread.State: WAITING
    at sun.misc.Unsafe.park(Unsafe.java:-1)
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
    at java.awt.EventQueue.getNextEvent(EventQueue.java:554)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:170)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

    "TimerQueue@2153" daemon prio=5 tid=0x16 nid=NA waiting
    java.lang.Thread.State: WAITING
    at sun.misc.Unsafe.park(Unsafe.java:-1)
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
    at java.util.concurrent.DelayQueue.take(DelayQueue.java:211)
    at javax.swing.TimerQueue.run(TimerQueue.java:171)
    at java.lang.Thread.run(Thread.java:745)

    "D3D Screen Updater@1944" daemon prio=7 tid=0x15 nid=NA waiting
    java.lang.Thread.State: WAITING
    at java.lang.Object.wait(Object.java:-1)
    at sun.java2d.d3d.D3DScreenUpdateManager.run(D3DScreenUpdateManager.java:423)
    at java.lang.Thread.run(Thread.java:745)

    "main@1" prio=5 tid=0x1 nid=NA runnable
    java.lang.Thread.State: RUNNABLE
    at Client.run(Client.java:117)
    at Client.main(Client.java:137)

    "Registry cleanup thread-0@1455" daemon prio=5 tid=0x12 nid=NA sleeping
    java.lang.Thread.State: TIMED_WAITING
    at java.lang.Thread.sleep(Thread.java:-1)
    at chrriis.common.ObjectRegistry$1.run(ObjectRegistry.java:40)

    "AWT-Windows@923" daemon prio=6 tid=0xe nid=NA runnable
    java.lang.Thread.State: RUNNABLE
    at sun.awt.windows.WToolkit.eventLoop(WToolkit.java:-1)
    at sun.awt.windows.WToolkit.run(WToolkit.java:306)
    at java.lang.Thread.run(Thread.java:745)

    "AWT-Shutdown@921" prio=5 tid=0xd nid=NA waiting
    java.lang.Thread.State: WAITING
    at java.lang.Object.wait(Object.java:-1)
    at java.lang.Object.wait(Object.java:502)
    at sun.awt.AWTAutoShutdown.run(AWTAutoShutdown.java:295)
    at java.lang.Thread.run(Thread.java:745)

    "Java2D Disposer@919" daemon prio=10 tid=0xc nid=NA waiting
    java.lang.Thread.State: WAITING
    at java.lang.Object.wait(Object.java:-1)
    at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:143)
    at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:164)
    at sun.java2d.Disposer.run(Disposer.java:148)
    at java.lang.Thread.run(Thread.java:745)

    "Finalizer@2157" daemon prio=8 tid=0x3 nid=NA waiting
    java.lang.Thread.State: WAITING
    at java.lang.Object.wait(Object.java:-1)
    at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:143)
    at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:164)
    at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:209)

    "Reference Handler@2158" daemon prio=10 tid=0x2 nid=NA waiting
    java.lang.Thread.State: WAITING
    at java.lang.Object.wait(Object.java:-1)
    at java.lang.Object.wait(Object.java:502)
    at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:157)

    "Attach Listener@2155" daemon prio=5 tid=0x5 nid=NA runnable
    java.lang.Thread.State: RUNNABLE

    "Signal Dispatcher@2156" daemon prio=9 tid=0x4 nid=NA runnable
    java.lang.Thread.State: RUNNABLE
    Merci pour ton aide,
    A+
    Pensez à voter pour une réponse qui vous aide ou pour une personne insolente !
    Si votre sujet est résolu, cliquez sur le bouton !

  8. #8
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par CLeBeR Voir le message
    Salut !

    J'ai juste changé le nom de la classe pour m'organiser dans mon projet, la classe d'origine issue des exemples du site du développeur s'appelle SimpleWebBrowserExample , le code reste exactement le même.
    Si je comprends bien la classe Navigateur dont tu parles, correspond bien au source de la classe SimpleWebBrowserExample que tu donnes dans ton avant-dernier message, et donc est un JPanel ? Normal que tu ne vois rien : un JPanel ne peut s'afficher qu'en étant mis dans une fenêtre (JFrame, JDialog, JWindow...).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  9. #9
    Membre habitué Avatar de CLeBeR
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 412
    Points : 188
    Points
    188
    Par défaut
    Hello,
    La classe Navigateur (ou SimpleWebBrowserExample) étend bien d'un JPanel, mais dans le run() du main, on crée bien un JFrame. Cette classe est bonne c'est sûr car comme je te l'ai dit, lorsque j'exécute ma classe Navigateur dans IntelliJ IDEA, elle se lance correctement, le navigateur apparaît, la vidéo se lance automatiquement...
    C'est vraiment au niveau de mon lancement via la classe Client que ça cloche, mais où...
    A+
    Pensez à voter pour une réponse qui vous aide ou pour une personne insolente !
    Si votre sujet est résolu, cliquez sur le bouton !

  10. #10
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par CLeBeR Voir le message
    Le problème c'est que mon Navigateur ne s'instancie pas.
    Parce que ton run sur le client juste avant ne retourne jamais (while true dedans), tout simplement. Fait en un thread et lance le client dans ce thread si tu veux pouvoir continuer après.

  11. #11
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Oui, enfin, dans la version de la copie d'écran Intellij, la Navigateur est bien lancé avant le client, mais un new Navigateur() n'a jamais appelé la méthode main() de la classe Navigateur ! Si le Navigateur s'affiche quand on "lance" la classe Navigateur à part, c'est qu'il y a une méthode main dans cette classe qui met le JPanel (Navigateur extends) dans une JFrame.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  12. #12
    Membre habitué Avatar de CLeBeR
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 412
    Points : 188
    Points
    188
    Par défaut
    Bonjour à tous,
    effectivement, lorsque l'on instancie un objet, le main() n'est appelé, c'est tout simplement pour ça que le Navigateur n'était pas lancé. Un petit test tout bête pour vérifier ça : Créer deux classes A et B :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public class A {
        public static void main(String[] args) {
            B b = new B();
        }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    import javax.swing.*;
    public class B {
        public static void main(String[] args) {
            javax.swing.JOptionPane.showMessageDialog(null,"B est lancé et crée !", "B est crée", JOptionPane.INFORMATION_MESSAGE);
     
        }
    }
    Le message n'apparaît pas, c'est donc que le main() n'est pas appelé. Pour résoudre le problème dans la classe Navigateur j'ai crée une méthode Instancier() qui contient le main() de classe Navigateur. Dans le main() de ma classe Client, j'appelle cette méthode et tout fonctionne.
    Merci, par contre j'ai une petite question, est-ce normal quand je ferme le JFrame Navigateur que ça me ferme aussi le JFrame de Client alors qu'il est dans un thread ? De même lorsque je fais un Interrupt() du thread, le JFrame Navigateur ne se ferme pas.
    @+
    Pensez à voter pour une réponse qui vous aide ou pour une personne insolente !
    Si votre sujet est résolu, cliquez sur le bouton !

  13. #13
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Thread.interrupt() ne fait que changer un état (et soulever une exception dans certain cas (les méthodes qui suspendent le thread comme wait(), sleep()...)) : il te faut tester cet état (isInterrupted()) dans ton while et sortir lorsqu'il est à true (par exemple while(!isInterrupted()).

    Il y a aussi l'opération de fermeture par défaut qui peut faire un System.exit() éventuellement (frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  14. #14
    Membre habitué Avatar de CLeBeR
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 412
    Points : 188
    Points
    188
    Par défaut
    Bonjour,
    le navigateur était sur JFrame.EXIT_ON_CLOSE en opération de fermeture par défaut justement, pour ne fermer que la fenêtre, il faut le mettre sur JFrame.DISPOSE_ON_CLOSE.
    Merci.
    Pensez à voter pour une réponse qui vous aide ou pour une personne insolente !
    Si votre sujet est résolu, cliquez sur le bouton !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Reflection] Instancier un objet
    Par bl@st dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 28/10/2008, 11h09
  2. [POO] Instancier un objet avec le nom de la classe
    Par shinchun dans le forum Langage
    Réponses: 4
    Dernier message: 08/06/2006, 13h44
  3. Réponses: 4
    Dernier message: 08/03/2006, 19h07
  4. Réponses: 6
    Dernier message: 18/01/2006, 16h26
  5. instancier un objet Excel
    Par RobinNono dans le forum ASP
    Réponses: 1
    Dernier message: 13/12/2005, 15h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo