Bloquear pantalla

Iniciado por Mine Sweeper, 6 Septiembre 2013, 15:34 PM

0 Miembros y 1 Visitante están viendo este tema.

Mine Sweeper

Necesito hacer un programa, el cual si no se llena cierta informacion en un Textfield que no te permita cambiarte de ventana dentro de windows, osea que no puedas quitar el programa hasta que llenes la informacion que se necesita, existe alguna funcion o algo para hacer esto?

Stakewinner00

No se java, pero supongo que puedes hacer que el programa vaya poniendo el focus en la ventana que tenga un nombre específico. Así el usuario se vería obligado a rellenar esa información para poder cambiar el focus

Zoik

Bueno, podrías programar un evento en ese textfield, que hasta que no escriba esa información mantenga esa ventana con lo siguiente:

Código (java) [Seleccionar]
ventana.setModal(true);

Y para que no cierren la aplicación:

Código (java) [Seleccionar]
frame.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);

Este último código unicamente se le puede aplicar a tu frame, en el caso en que le den a la X no se cerrara, solo podrán matar el proceso.

Un saludo y comenta que tal te fue.

Mine Sweeper

Andube investigando, y encontre este codigo en una pagina, el cual puedo modificar para hacer lo que necesito, pero la situacion es esta.
Si los datos que meten en el campo de texto son correctos, debe desbloquear la pantalla, hasta ahi no hay ningun problema, el problema es que de ahi usan una aplicacion hecha por un provedor y al final imprime una etiqueta, se puede saber cuando cambia el estado de impresion para que cuando imprima volver a bloquear la pantalla y que asi se este repitiendo?

Este es el codigo que encontre:

import javax.swing.JOptionPane;
/**
* @web http://www.jc-mouse.net/
* @author Mouse
*/
public class jFrameBlocked extends javax.swing.JFrame {

    /**
     * Creates new form jFrameBlocked
     */
    public jFrameBlocked() {
       
        this.setUndecorated(true);//quita bordes a jframe
       
        initComponents();
       
        this.setDefaultCloseOperation( DO_NOTHING_ON_CLOSE  );//evita cerra jframe con ALT+C
        this.setExtendedState( MAXIMIZED_BOTH );//maximizado
        this.setAlwaysOnTop(true);//siempre al frente       
        //nueva instancia de jBlocked pasando como parametros e este JFrame
        new jBlocked( this ).block();
       
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {
        java.awt.GridBagConstraints gridBagConstraints;

        jPanel1 = new javax.swing.JPanel();
        jPanel2 = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        user = new javax.swing.JTextField();
        pass = new javax.swing.JTextField();
        btnSalir = new javax.swing.JButton();
        btnEntrar = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jPanel1.setBackground(new java.awt.Color(51, 51, 255));
        jPanel1.setBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 1));
        jPanel1.setLayout(new java.awt.GridBagLayout());

        jPanel2.setBorder(javax.swing.BorderFactory.createEtchedBorder());
        jPanel2.setLayout(new java.awt.GridBagLayout());

        jLabel1.setText("Usuario :");
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 0;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
        gridBagConstraints.insets = new java.awt.Insets(40, 40, 5, 5);
        jPanel2.add(jLabel1, gridBagConstraints);

        jLabel2.setText("Contraseña :");
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 1;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
        gridBagConstraints.insets = new java.awt.Insets(5, 40, 5, 5);
        jPanel2.add(jLabel2, gridBagConstraints);

        user.setPreferredSize(new java.awt.Dimension(200, 32));
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 1;
        gridBagConstraints.gridy = 0;
        gridBagConstraints.gridwidth = 2;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
        gridBagConstraints.insets = new java.awt.Insets(40, 5, 5, 40);
        jPanel2.add(user, gridBagConstraints);

        pass.setPreferredSize(new java.awt.Dimension(200, 32));
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 1;
        gridBagConstraints.gridy = 1;
        gridBagConstraints.gridwidth = 2;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
        gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 40);
        jPanel2.add(pass, gridBagConstraints);

        btnSalir.setText("Cancelar");
        btnSalir.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnSalirActionPerformed(evt);
            }
        });
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 2;
        gridBagConstraints.gridy = 2;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
        gridBagConstraints.insets = new java.awt.Insets(30, 10, 40, 0);
        jPanel2.add(btnSalir, gridBagConstraints);

        btnEntrar.setText("Entrar");
        btnEntrar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnEntrarActionPerformed(evt);
            }
        });
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 1;
        gridBagConstraints.gridy = 2;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
        gridBagConstraints.insets = new java.awt.Insets(30, 0, 40, 0);
        jPanel2.add(btnEntrar, gridBagConstraints);

        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 0;
        jPanel1.add(jPanel2, gridBagConstraints);

        getContentPane().add(jPanel1, java.awt.BorderLayout.CENTER);

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void btnSalirActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnSalirActionPerformed
       System.exit(0);
    }//GEN-LAST:event_btnSalirActionPerformed

    private void btnEntrarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnEntrarActionPerformed
        if( this.user.getText().equals("user") && this.pass.getText().equals("1234") )
        {
            new jFrameGUI().setVisible(true);
            this.dispose();           
        }
        else
        {
            JOptionPane.showMessageDialog( this, "Access denied");
        }
    }//GEN-LAST:event_btnEntrarActionPerformed

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(jFrameBlocked.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(jFrameBlocked.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(jFrameBlocked.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(jFrameBlocked.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new jFrameBlocked().setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnEntrar;
    private javax.swing.JButton btnSalir;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JTextField pass;
    private javax.swing.JTextField user;
    // End of variables declaration//GEN-END:variables
}




import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import javax.swing.JFrame;
/**
* @web http://www.jc-mouse.net/
* @author Mouse
*/
public class jBlocked {
   
    private JFrame jframe=null;
   
    /**
     * Constructor de clase
     */
    public jBlocked( JFrame f )
    {
        this.jframe = f;
    }
   
    /**
     * ejecuta una tarea cada "n" tiempo
     * Para evitar que el usuario utilice las teclas (WINDOWS + D)(TAB) y asi perder el foco
     * de la aplicación, cada 50 milisegundos se envia el JFrame al frente y se cambia su propiedad a maximizado
     */
    public void block()
    {
        ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
        scheduler.scheduleAtFixedRate(
            new Runnable()
            {
                @Override
                public void run() {                   
                    front();
                }
              }, 500, 50 , TimeUnit.MILLISECONDS ); //comienza dentro de 1/2 segundo y luego se repite cada N segundos
    }
   
    /**
     *
     */
    public void front()
    {
        jframe.setExtendedState( JFrame.MAXIMIZED_BOTH );//maximizado
        jframe.toFront();
    }
   
}//--> fin




public class jFrameGUI extends javax.swing.JFrame {

    /**
     * Creates new form jFrameGUI
     */
    public jFrameGUI() {
        initComponents();
        this.setLocationRelativeTo(null);//posicion al centro de la pantalla           
        this.setAlwaysOnTop(true);//siempre al frente       
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {
        java.awt.GridBagConstraints gridBagConstraints;

        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("Access granted");
        getContentPane().setLayout(new java.awt.GridBagLayout());

        jLabel1.setFont(new java.awt.Font("Tahoma", 1, 36)); // NOI18N
        jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel1.setText("Congratulations");
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 0;
        gridBagConstraints.insets = new java.awt.Insets(40, 100, 10, 100);
        getContentPane().add(jLabel1, gridBagConstraints);

        jLabel2.setFont(new java.awt.Font("Tahoma", 1, 24)); // NOI18N
        jLabel2.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel2.setText("Access granted");
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 1;
        gridBagConstraints.insets = new java.awt.Insets(10, 10, 50, 10);
        getContentPane().add(jLabel2, gridBagConstraints);

        pack();
    }// </editor-fold>//GEN-END:initComponents

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(jFrameGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(jFrameGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(jFrameGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(jFrameGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new jFrameGUI().setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    // End of variables declaration//GEN-END:variables
}


Zoik

#4
Me interese por el asunto, así que me puse manos a la obra y a salido esto:

Código (java) [Seleccionar]
/*
* Autor: Zoik
*/
package base;

import graphics.Gui;

public class Main {

public static void main(String[] args) {
java.awt.EventQueue.invokeLater(new Runnable() {
           public void run() {
               new Gui();
           }
       });

}

}


Código (java) [Seleccionar]
/*
* Autor: Zoik
*/
package graphics;

import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;

import base.Block;

public class Gui extends JFrame implements ActionListener{

private static final long serialVersionUID = 1L;
private final String backgroundURL = "src/images/background.jpg";
private final String loginTitle = "Login";
private final String userLabelText = "User:";
private final String passLabelText = "Password:";
private final String loginButtonLabelText = "Login";
private final String cancelButtonLabelText = "Cancel";

private final String user = "user";
private final String pass = "1234";

private ImageDesktopPane desktopBackground;
private JInternalFrame internalFrameLogin;
private JPanel panelLogin;
private JLabel userLabel;
private JLabel passwordLabel;
private JTextField userTextField;
private JPasswordField passwordTextField;
private JButton loginButton;
private JButton cancelButton;
private Block thread;

public Gui(){
initFrame();
}


public void initFrame(){
setUndecorated(true);
       setDefaultCloseOperation( DO_NOTHING_ON_CLOSE  );
       setExtendedState( MAXIMIZED_BOTH );
       setAlwaysOnTop(true);
       new Block(this);
       initBackground();
initInternalFrame();
       setVisible(true);
}

public void initBackground(){
desktopBackground = new ImageDesktopPane(backgroundURL);
desktopBackground.setLayout(new GridBagLayout());
add(desktopBackground);
}

public void initInternalFrame(){
internalFrameLogin = new JInternalFrame(loginTitle);
internalFrameLogin.setPreferredSize(new Dimension(300, 200));
desktopBackground.add(internalFrameLogin);
internalFrameLogin.setVisible(true);
initLoginPanel();
}

public void initLoginPanel(){
panelLogin = new JPanel();
panelLogin.setLayout(new GridBagLayout());
internalFrameLogin.add(panelLogin);
initLabels();
initTextFields();
initButtons();
}

public void initLabels(){
userLabel = new JLabel(userLabelText);
passwordLabel = new JLabel(passLabelText);
addComponentGBL(panelLogin,userLabel,0,0,1,1,GridBagConstraints.WEST, GridBagConstraints.NONE, 10, 75, 0, 0);
addComponentGBL(panelLogin,passwordLabel,0,1,1,1,GridBagConstraints.WEST, GridBagConstraints.NONE, 10, 45, 70, 0);
}

public void initTextFields(){
userTextField = new JTextField();
passwordTextField = new JPasswordField();
userTextField.setPreferredSize(new Dimension(90,30));
passwordTextField.setPreferredSize(new Dimension(90,30));
addComponentGBL(panelLogin,userTextField,1,0,1,1,GridBagConstraints.EAST, GridBagConstraints.NONE, 10, 0, 0, 65);
addComponentGBL(panelLogin,passwordTextField,1,1,1,1,GridBagConstraints.EAST, GridBagConstraints.NONE, 10, 0, 70, 65);
userTextField.setFocusable(true);
}

public void initButtons(){
loginButton = new JButton(loginButtonLabelText);
cancelButton = new JButton(cancelButtonLabelText);
loginButton.addActionListener(this);
cancelButton.addActionListener(this);
addComponentGBL(panelLogin,loginButton,0,1,1,1,GridBagConstraints.CENTER, GridBagConstraints.NONE, 30, 70, 0, 0);
addComponentGBL(panelLogin,cancelButton,1,1,1,1,GridBagConstraints.CENTER, GridBagConstraints.NONE, 30, 0, 0, 40);
}

public void addComponentGBL(Container container, Component component, int gridx, int gridy, int gridwidth, int gridheight, int anchor, int fill, int inset1, int inset2, int inset3, int inset4) {
Insets insets = new Insets(inset1, inset2, inset3, inset4);
GridBagConstraints gbc = new GridBagConstraints(gridx, gridy, gridwidth, gridheight, 1.0, 1.0, anchor, fill, insets, 0, 0);
   container.add(component, gbc);
 }


public void actionPerformed(ActionEvent e) {
if(e.getSource() == loginButton) {
if(userTextField.getText().equals(user) && passwordTextField.getText().equals(pass)){
dispose();
}
} else if(e.getSource() == cancelButton) {
dispose();
}
}

}


Código (java) [Seleccionar]
/*
* Autor: Zoik
*/
package graphics;

import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JDesktopPane;

public class ImageDesktopPane extends JDesktopPane{

private static final long serialVersionUID = 1L;
private BufferedImage image;

   public ImageDesktopPane(String path) {
      try {                
         image = ImageIO.read(new File(path));
      } catch (IOException ex) {
           System.out.println("Error al cargar la imagen de fondo");
      }
   }

   @Override
   protected void paintComponent(Graphics g) {
       super.paintComponent(g);
       g.drawImage(image, 0, 0, getWidth(), getHeight(), this);          
   }

}


Código (java) [Seleccionar]
/*
* Autor: Zoik
*/
package base;

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

import javax.swing.JFrame;

import graphics.Gui;

public class Block{

private Gui frame;

public Block(Gui gui){
frame = gui;
ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
        scheduler.scheduleAtFixedRate(
            new Runnable()
            {
                public void run() {                   
                    front();
                }
              }, 500, 50 , TimeUnit.MILLISECONDS );
}

public void front(){
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
frame.toFront();
}

}



Un saludo y espero te sirva.

Mine Sweeper

El codigo es parecido al que puse, pero tiene una pequeña falla de seguridad.
En windows 7 si presionas Windows + tab te deja desplazarte entre las ventanas y aunque regreses a la ventana del programa presionas windows+r y escribes cmd y si te abre la consola aunque no mires lo que haces y ahi se puede finalizar el proceso.
Esa es la falla mas importante que tiene, la otra es que si tengo dos monitores, con pasar el administrador de tareas al segundo monitor puedo finalizar el programa.

Zoik

#6
Cierto, e estado probando el que pasaste y también le sucede lo mismo, trastearé un poco con los focus a ver si logro solucionarlo.

Un saludo.

EDITO: Como medida provisional para el taskmgr y el cmd, aunque un poco chapucera, sustituye el método front() por este:

Código (java) [Seleccionar]
public void front(){
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
frame.toFront();
String osName = System.getProperty("os.name");
if(osName.toUpperCase().contains("WIN")){
try {
Runtime.getRuntime().exec("tskill cmd");
Runtime.getRuntime().exec("tskill taskmgr");
} catch (IOException e) {
e.printStackTrace();
}
}
}

Mine Sweeper

Puede ser algo provisional o chapusera como dices tu, pero es una alternativa al problema =P
Para esto hay que tener ingenio y la verdad eso nunca se me ocurrio xD
pero soluciona el problema que teniamos que es lo importante jajaja

Mine Sweeper

Me pasa algo raro, lo corro en el Eclipse y funciona a la perfeccion, una vez que acaba  que cierro el programa ya no puedo volver a abrir la consola y ni el task manager, pero ese no es el problema, lo que note, es que si lo hago jar y lo ejecuto, si me permite abrir la consola

Zoik

#9
He observado que el schedule se queda abierto cuando finalizas la aplicación, por tanto aunque la cierres seguiras sin poder abrir el cmd y el taskmgr.

Por tanto e vuelto a retocar toda la aplicación y quedaría así:

Código (java) [Seleccionar]
/*
* Autor: Zoik
*/
package base;

import graphics.Gui;

public class Main {

public static void main(String[] args) {
java.awt.EventQueue.invokeLater(new Runnable() {
           public void run() {
               new Gui();
           }
       });

}

}


Código (java) [Seleccionar]
/*
* Autor: Zoik
*/
package graphics;

import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;

import base.Block;

public class Gui extends JFrame implements ActionListener{

private static final long serialVersionUID = 1L;
private final String backgroundURL = "src/images/background.jpg";
private final String loginTitle = "Login";
private final String userLabelText = "User:";
private final String passLabelText = "Password:";
private final String loginButtonLabelText = "Login";
private final String cancelButtonLabelText = "Cancel";

private final String user = "user";
private final String pass = "1234";

private ImageDesktopPane desktopBackground;
private JInternalFrame internalFrameLogin;
private JPanel panelLogin;
private JLabel userLabel;
private JLabel passwordLabel;
private JTextField userTextField;
private JPasswordField passwordTextField;
private JButton loginButton;
private JButton cancelButton;
private Block thread;

public Gui(){
initFrame();
}


public void initFrame(){
setUndecorated(true);
setDefaultCloseOperation( DO_NOTHING_ON_CLOSE  );
setExtendedState( MAXIMIZED_BOTH );
setAlwaysOnTop(true);
thread = new Block(this);
thread.start();
initBackground();
initInternalFrame();
setVisible(true);
}

public void initBackground(){
desktopBackground = new ImageDesktopPane(backgroundURL);
desktopBackground.setLayout(new GridBagLayout());
add(desktopBackground);
}

public void initInternalFrame(){
internalFrameLogin = new JInternalFrame(loginTitle);
internalFrameLogin.setPreferredSize(new Dimension(300, 200));
desktopBackground.add(internalFrameLogin);
internalFrameLogin.setVisible(true);
initLoginPanel();
}

public void initLoginPanel(){
panelLogin = new JPanel();
panelLogin.setLayout(new GridBagLayout());
internalFrameLogin.add(panelLogin);
initLabels();
initTextFields();
initButtons();
}

public void initLabels(){
userLabel = new JLabel(userLabelText);
passwordLabel = new JLabel(passLabelText);
addComponentGBL(panelLogin,userLabel,0,0,1,1,GridBagConstraints.WEST, GridBagConstraints.NONE, 10, 75, 0, 0);
addComponentGBL(panelLogin,passwordLabel,0,1,1,1,GridBagConstraints.WEST, GridBagConstraints.NONE, 10, 45, 70, 0);
}

public void initTextFields(){
userTextField = new JTextField();
passwordTextField = new JPasswordField();
userTextField.setPreferredSize(new Dimension(90,30));
passwordTextField.setPreferredSize(new Dimension(90,30));
addComponentGBL(panelLogin,userTextField,1,0,1,1,GridBagConstraints.EAST, GridBagConstraints.NONE, 10, 0, 0, 65);
addComponentGBL(panelLogin,passwordTextField,1,1,1,1,GridBagConstraints.EAST, GridBagConstraints.NONE, 10, 0, 70, 65);
userTextField.setFocusable(true);
}

public void initButtons(){
loginButton = new JButton(loginButtonLabelText);
cancelButton = new JButton(cancelButtonLabelText);
loginButton.addActionListener(this);
cancelButton.addActionListener(this);
addComponentGBL(panelLogin,loginButton,0,1,1,1,GridBagConstraints.CENTER, GridBagConstraints.NONE, 30, 70, 0, 0);
addComponentGBL(panelLogin,cancelButton,1,1,1,1,GridBagConstraints.CENTER, GridBagConstraints.NONE, 30, 0, 0, 40);
}

public void addComponentGBL(Container container, Component component, int gridx, int gridy, int gridwidth, int gridheight, int anchor, int fill, int inset1, int inset2, int inset3, int inset4) {
Insets insets = new Insets(inset1, inset2, inset3, inset4);
GridBagConstraints gbc = new GridBagConstraints(gridx, gridy, gridwidth, gridheight, 1.0, 1.0, anchor, fill, insets, 0, 0);
container.add(component, gbc);
}


public void actionPerformed(ActionEvent e) {
if(e.getSource() == loginButton) {
if(userTextField.getText().equals(user) && passwordTextField.getText().equals(pass)){
thread.stopThread();
dispose();
}
} else if(e.getSource() == cancelButton) {
thread.stopThread();
dispose();
}
}

}


Código (java) [Seleccionar]
/*
* Autor: Zoik
*/
package graphics;

import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JDesktopPane;

public class ImageDesktopPane extends JDesktopPane{

private static final long serialVersionUID = 1L;
private BufferedImage image;

public ImageDesktopPane(String path) {
try {                
image = ImageIO.read(new File(path));
} catch (IOException ex) {
System.out.println("Error al cargar la imagen de fondo");
}
}

@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(image, 0, 0, getWidth(), getHeight(), this);          
}

}


Código (java) [Seleccionar]
/*
* Autor: Zoik
*/
package base;

import java.io.IOException;
import javax.swing.JFrame;

import graphics.Gui;

public class Block extends Thread{

private Gui frame;
private final String osName = System.getProperty("os.name");
private boolean running = false;

public Block(Gui gui){
frame = gui;
}

public void run(){
running = true;
while(running == true){
front();
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

public void stopThread(){
running = false;
}

public void front(){
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
frame.toFront();
if(osName.toUpperCase().contains("WIN")){
try {
Runtime.getRuntime().exec("tskill cmd");
Runtime.getRuntime().exec("tskill taskmgr");
} catch (IOException e) {
e.printStackTrace();
}
}
}

}


Antes de nada reiniciar el PC, porque el schedule sigue abierto y no puedes matarlo...

Un saludo.