java 关闭windows_Windows关闭时的Java退出

我有这个代码。如果检测到计算机正在关闭,我想退出Java应用程序。我有这个问题,如果在Windows上单击“关闭”,我的Java应用程序会与Android应用程序连接断开连接。我想显示Java应用程序已断开连接,否则将退出。

// Copyright 2012

// Android Remote Desktop Server Ver. 1.0

import javax.swing.*;

import java.awt.*;

import java.awt.event.*;

import java.net.*;

import java.util.Random;

public class ServerWindow implements ActionListener{

private RemoteDataServer server;

private Thread sThread; //server thread

private static final int WINDOW_HEIGHT = 200;

private static final int WINDOW_WIDTH = 350;

private String ipAddress;

private JFrame window = new JFrame("Remote Control for Android");

private JLabel addressLabel = new JLabel("");

private JLabel portLabel = new JLabel("Android Remote Control Port: ");

private JTextArea[] buffers = new JTextArea[3];

private JTextField portTxt = new JTextField(5);

private JLabel serverMessages = new JLabel("Not Connected");

private JButton connectButton = new JButton("Start Server");

private JButton disconnectButton = new JButton("Stop Server");

public boolean connected = false;

//@SuppressWarnings("deprecation")

public ServerWindow(){

server = new RemoteDataServer();

window.setSize(WINDOW_WIDTH, WINDOW_HEIGHT);

window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

connectButton.addActionListener(this);

disconnectButton.addActionListener(this);

Container c = window.getContentPane();

c.setLayout(new FlowLayout());

try{

InetAddress ip = InetAddress.getLocalHost();

ipAddress = ip.getHostAddress();

addressLabel.setText("Android Remote Control Server IP Address: "+ipAddress);

}

catch(Exception e){addressLabel.setText("IP Address Could Not be Resolved");}

int x;

for(x = 0; x < 3; x++){

buffers[x] = new JTextArea("", 1, 30);

buffers[x].setEditable(false);

buffers[x].setBackground(window.getBackground());

}

portTxt.setEditable(false);

Random portRandom = new Random();

for (int i = 0; i < 10; i++) {

int port = portRandom.nextInt(4998) + 1;

int portNum = 5000+port;

String portString = Integer.toString(portNum);

portTxt.setText(portString);

}

c.add(addressLabel);

c.add(buffers[0]);

c.add(portLabel);

//portTxt.setText("5444");

c.add(portTxt);

c.add(buffers[1]);

c.add(connectButton);

c.add(disconnectButton);

c.add(buffers[2]);

c.add(serverMessages);

window.setLocationRelativeTo(null);

window.setVisible(true);

window.setResizable(false);

}

public void actionPerformed(ActionEvent e){

Object src = e.getSource();

if(src instanceof JButton){

if((JButton)src == connectButton){

int port = Integer.parseInt(portTxt.getText());

runServer(port);

}

else if((JButton)src == disconnectButton){

closeServer();

}

}

}

public void runServer(int port){

if(port <= 9999){

server.setPort(port);

sThread = new Thread(server);

sThread.start();

}

else{

serverMessages.setText("The port Number must be less than 10000");

}

}

public void closeServer(){

serverMessages.setText("Disconnected");

server.shutdown();

connectButton.setEnabled(true);

}

public static void main(String[] args){

new ServerWindow();

}

public class RemoteDataServer implements Runnable{

int PORT;

private DatagramSocket server;

private byte[] buf;

private DatagramPacket dgp;

private String message;

private AutoBot bot;

public RemoteDataServer(int port){

PORT = port;

buf = new byte[1000];

dgp = new DatagramPacket(buf, buf.length);

bot = new AutoBot();

serverMessages.setText("Not Connected");

}

public RemoteDataServer(){

buf = new byte[1000];

dgp = new DatagramPacket(buf, buf.length);

bot = new AutoBot();

serverMessages.setText("Not Connected");

}

public String getIpAddress(){

String returnStr;

try{

InetAddress ip = InetAddress.getLocalHost();

returnStr = ip.getCanonicalHostName();

}

catch(Exception e){ returnStr = new String("Could Not be Resolve Ip Address");}

return returnStr;

}

public void setPort(int port){

PORT = port;

}

public void shutdown(){

try{server.close();

serverMessages.setText("Disconnected");}

catch(Exception e){}

}

public void run(){

//boolean connected = false;

try {InetAddress ip = InetAddress.getLocalHost();

serverMessages.setText("Waiting for connection on " + ip.getCanonicalHostName());

server = new DatagramSocket(PORT, ip);

connected = true;

connectButton.setEnabled(false);

}

catch(BindException e){ serverMessages.setText("Port "+PORT+" is already in use. Use a different Port"); }

catch(Exception e){serverMessages.setText("Unable to connect");}

while(connected){

//Runtime.getRuntime().exit(0);

// get message from sender

try{ server.receive(dgp);

// translate and use the message to automate the desktop

message = new String(dgp.getData(), 0, dgp.getLength());

if (message.equals("Connectivity")){

//send response to confirm connectivity

serverMessages.setText("Trying to Connect");

server.send(dgp); //echo the message back

}else if(message.equals("Connected")){

server.send(dgp); //echo the message back

}else if(message.equals("Close")){

serverMessages.setText("Controller has Disconnected. Trying to reconnect."); //echo the message back

}else{

serverMessages.setText("Android Phone Connected to ARD Server");

bot.handleMessage(message);

}

}catch(Exception e){

serverMessages.setText("Disconnected");

connected = false;}

}

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值