我编写了这段代码来制作计算机实验室应用程序来监控学生。这里屏幕锁定工作但禁用键不起作用我在这里尝试使用机器人
如何运行循环以连续收听消息并检查 Screenlocker 的状态以在 Studentchat.java 中锁定/解锁屏幕
package org;
import java.awt.AWTException;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.Robot;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JWindow;
@SuppressWarnings("serial")
public class ScreenLocker extends JWindow implements KeyListener {
private boolean locked;
public ScreenLocker() {
super();
this.locked = false;
JLabel label = new JLabel("Your Screen is Locked by your Teacher", JLabel.CENTER);
label.setFont(new Font("Serif", Font.PLAIN, 30));
JPanel panel =(JPanel) getContentPane();
panel.setBackground(Color.WHITE);
panel.add(label, BorderLayout.CENTER);
setFocusTraversalKeysEnabled(false);
}
public synchronized void setLocked(boolean lock) throws AWTException, InterruptedException {
GraphicsEnvironment ge = GraphicsEnvironment
.getLocalGraphicsEnvironment();
GraphicsDevice gd = ge.getDefaultScreenDevice();
if (lock) {
setAlwaysOnTop(true);
this.setVisible(true);
gd.setFullScreenWindow(this);
this.locked = true;
Robot robot = new Robot();
releaseKeys(robot);
kill("explorer.exe");
kill("taskmgr.exe");
} else {
gd.setFullScreenWindow(null);
this.setVisible(false);
this.locked = false;
restar("taskmgr.exe");
restar("explorer.exe");
this.dispose();
}
}
public boolean isLocked() {
return locked;
}
private void kill(String string) {
try {
Runtime.getRuntime().exec("taskkill /F /IM " + string).waitFor();
} catch (Exception e) {
}
}
private void releaseKeys(Robot robot) {
robot.keyRelease(17);
robot.keyRelease(18);
robot.keyRelease(127);
robot.keyRelease(524);
robot.keyRelease(9);
}
private void restar(String string) {
try {
Runtime.getRuntime().exec(string).waitFor();
} catch (Exception e) {
}
}
@Override
public void keyPressed(KeyEvent e) {
e.consume();
}
@Override
public void keyReleased(KeyEvent e) {
e.consume();
}
@Override
public void keyTyped(KeyEvent e) {
e.consume();
}
}
package org;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import javax.swing.*;
@SuppressWarnings("serial")
public class StudentChat extends JFrame implements Runnable
{
private TextField tf = new TextField();
private JTextArea ta = new JTextArea(10,20);
private Socket socket;
private DataOutputStream dout;
private DataInputStream din;
private String cmdmsg = null;
public StudentChat()
{
ta.setLineWrap(true);
ta.setEditable(false);
ta.setForeground(Color.blue);
JScrollPane scp = new JScrollPane(ta, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
String host = "192.168.1.235";
int port = 5000;
setLayout( new BorderLayout() );
setSize(400, 200);
setTitle("Student Chat Application");
add( "South", tf );
add( "Center", scp );
tf.addActionListener( new ActionListener()
{
public void actionPerformed( ActionEvent e )
{
processMessage( e.getActionCommand() );
}
} );
try
{
socket = new Socket( host, port );
//System.out.println( "connected to "+socket );
ta.append("connected to "+socket.getInetAddress().getHostName()+"\n");
din = new DataInputStream( socket.getInputStream() );
dout = new DataOutputStream( socket.getOutputStream() );
new Thread( this ).start();
} catch( IOException ie ) {}
}
private void processMessage( String message ) {
try {
String user = System.getProperty("user.name");
dout.writeUTF(user+" :"+message);
tf.setText( "" );
} catch( IOException ie ) {}
}
public void run()
{
try
{
while (true)
{
ScreenLocker sl = new ScreenLocker();
String message = din.readUTF();
if(message.equals("Teacher: "+System.getProperty("user.name")+"lock"))
{
sl.setLocked(true);
}
if(message.equals("Teacher: "+System.getProperty("user.name")+"unlock"))
{
sl.setLocked(false);
}
if(message.indexOf('>')>0)
{
cmdmsg = message.substring(0, message.indexOf('>'));
if(cmdmsg.equals("Teacher: "+System.getProperty("user.name")+"cmd"))
{
String cmd = message.substring(message.indexOf('>')+1);
try
{
Runtime.getRuntime().exec(cmd);
}
catch (Exception e) {}
}
}
ta.append( message+"\n" );
}
} catch( IOException ie ) {}
catch (AWTException e)
{
e.printStackTrace();
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
public static void main(String args[])
{
new StudentChat().setVisible(true);
}
}