Note that there are some explanatory texts on larger screens.

plurals
  1. POJava Application hangs on Windows Shutdown
    primarykey
    data
    text
    <p>I have this whole code. My Application hangs up after the windows is force shutdown then cancel.</p> <p><code>application running... &gt;&gt; windows force shutdown &gt;&gt; cancel &gt;&gt; back to windows (application HANGS Up)</code></p> <p>Its a java bug. I want to exit my application before it hangs up or before the window is closing. </p> <p>Thanks </p> <pre><code>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; 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 &lt; 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 &lt; 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 &lt;= 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(){ 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){ // 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;} } } } } </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload