SELIOR PROGRAMME DE COMMANDE D'ORDINATEUR(ETEINDRE REDEMARRER DECONNECTER)

cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 - 17 mai 2011 à 14:40
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 - 7 oct. 2013 à 20:21
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/53093-selior-programme-de-commande-d-ordinateur-eteindre-redemarrer-deconnecter

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 127
7 oct. 2013 à 20:21
Puisque cette source remonte à la surface j'en profites pour mettre mon évaluation : 2/5

Certes c'est intéressant (un point) et ça fonctionne (deuxième point) mais vu que c'est très mal codé je vois difficilement comment mettre plus !

Entre les lignes de codes totalement inutiles (à commencer par les import), la redondance de code ou des horreurs comme la déclaration d'un objet JFrame dans le constructeur de la fenêtre au lieu d'utiliser la super classe !

Bref, je déconseilles fortement de prendre exemple sur le code source en l'état.
En voici une version corrigée pour ceux qui voudraient s'en inspirer :

import java.awt.GridLayout;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.InputStream;
import java.io.PrintStream;
import java.util.Scanner;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.UIManager;

public class Selior extends JFrame
{
    private static final long serialVersionUID = 1;
    
    private static final String TXT_TITLE = "Selior v2.0 - originally by DahouDo";
    private static final String TXT_SHUTDOWN = "Eteindre l'ordinateur";
    private static final String TXT_RESTART = "Redémarrer l'ordinateur";
    private static final String TXT_LOGOUT = "Fermer la session";
    
    private static final String CMD_SHUTDOWN = "shutdown -s";
    private static final String CMD_RESTART = "shutdown -r";
    private static final String CMD_LOGOUT = "shutdown -l";
    
    private static final Toolkit TOOLKIT = Toolkit.getDefaultToolkit();
    private static final Image IMG_ICON = TOOLKIT.getImage("france.png");
    private static final Image IMG_BACK = TOOLKIT.getImage("lb.png");
    
    private static final Runtime RUNTIME = Runtime.getRuntime();
    
    public static void main(String[] args)
    {
        try
        {
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        }
        catch (Exception e)
        {
        }
        
        new Selior().setVisible(true);
    }
    
    public Selior()
    {
        setTitle(TXT_TITLE);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(400, 400);
        setIconImage(IMG_ICON);
        setLayout(new GridLayout(4, 1));
        setLocationRelativeTo(null);
        
        add(new JLabel(new ImageIcon(IMG_BACK)));
        
        JButton shutdown = new JButton(TXT_SHUTDOWN);
        shutdown.addActionListener(action(CMD_SHUTDOWN));
        add(shutdown);
        
        JButton restart = new JButton(TXT_RESTART);
        restart.addActionListener(action(CMD_RESTART));
        add(restart);
        
        JButton logout = new JButton(TXT_LOGOUT);
        logout.addActionListener(action(CMD_LOGOUT));
        add(logout);
    }
    
    private static ActionListener action(final String cmd)
    {
        return new ActionListener()
        {
            @Override
            public void actionPerformed(ActionEvent e)
            {
                exec(cmd);
            }
        };
    }
    
    private static void exec(String cmd)
    {
        Process process = null;
        
        try
        {
            process = RUNTIME.exec(cmd);
            Thread out = flush(process.getInputStream(), System.out);
            Thread err = flush(process.getErrorStream(), System.err);
            out.join();
            err.join();
            process.destroy();
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
        
        System.exit(process == null ? -1 : process.exitValue());
    }
    
    private static Thread flush(final InputStream in, final PrintStream out)
    {
        Thread thread = new Thread()
        {
            @Override
            public void run()
            {
                Scanner sc = new Scanner(in);
                while (sc.hasNextLine())
                    out.println(sc.nextLine());
                sc.close();
            }
        };
        
        thread.start();
        
        return thread;
    }
}
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 127
7 oct. 2013 à 08:00
En supposant que tu ais correctement installé Java, et que tu ais placé le fichier PROG.java et les deux images dans un dossier "C:\Workspace\CCM" par exemple.
Alors il te suffit d'ouvrir une ligne de commande et d'entre ces trois commandes :

cd C:\WorkspaceCCM
javac PROG.java
java PROG
franck1000 Messages postés 5 Date d'inscription samedi 28 septembre 2013 Statut Membre Dernière intervention 15 novembre 2013
7 oct. 2013 à 01:42
slt tout le monde (cs_julien39) je n'arrive pas à executer ton programme .Need help je suis debutant en java .merci à l'avance
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
23 mai 2011 à 16:36
Je viens de relire mon commentaire et de regarder à nouveau ton programme, et tu as raison, un seul fichier ca passe bien pour des petits programme.

a+
amateur_java Messages postés 32 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 6 août 2020
23 mai 2011 à 15:26
pour le seul fichier nrmalement c'est plus facile à lire et à assimiler sinon jai pas trop travailler la dessus c'etait juste un loisir ;-)
thanks pour le compliment!
n'hesite pas si tas besoin d'aide.
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
17 mai 2011 à 14:40
Dommage que tu ais utilisé une seul fichier, le code est assez pénible à lire, sinon, ca peut être utile, on voit assez peu de sources du genre sur ce site.