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í:
/*
* Autor: Zoik
*/
package base;
import graphics.Gui;
public class Main {
public static void main
(String[] args
) { public void run() {
new Gui();
}
});
}
}
/*
* 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;
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 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);
add(desktopBackground);
}
public void initInternalFrame(){
internalFrameLogin.
setPreferredSize(new Dimension(300,
200)); desktopBackground.add(internalFrameLogin);
internalFrameLogin.setVisible(true);
initLoginPanel();
}
public void initLoginPanel(){
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.
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
) { GridBagConstraints gbc
= new GridBagConstraints(gridx, gridy, gridwidth, gridheight,
1.0,
1.0, anchor, fill, insets,
0,
0); container.add(component, gbc);
}
if(e.getSource() == loginButton) {
if(userTextField.getText().equals(user) && passwordTextField.getText().equals(pass)){
thread.stopThread();
dispose();
}
} else if(e.getSource() == cancelButton) {
thread.stopThread();
dispose();
}
}
}
/*
* 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;
private static final long serialVersionUID = 1L;
public ImageDesktopPane
(String path
) { try {
image
= ImageIO.
read(new File(path
)); 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);
}
}
/*
* 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 {
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"); e.printStackTrace();
}
}
}
}
Antes de nada reiniciar el PC, porque el schedule sigue abierto y no puedes matarlo...
Un saludo.