2014-11-23 2 views
0
public class InterfaceGUI implements ActionListener { 

private JFrame frame; 

private JPanel panelController; 
private JPanel panelJack; 
private JPanel panelModbus; 
private JPanel panelLog; 
private JPanel panelStatus; 
private JPanel panelToController; 
private JPanel panelToJack; 

private JLabel lblIpAddController; 
private JLabel lblPortController; 
private JLabel lblIpAddJack; 
private JLabel lblPortJack; 
private JLabel lblStatusToController; 
private JLabel lblStatusConnToCont; 
private JLabel lblIpAddToController; 
private JLabel lblIpAddConnToCont; 
private JLabel lblPortToController; 
private JLabel lblPortConnToCont; 
private JLabel lblStatusToJack; 
private JLabel lblStatusConnToJack; 
private JLabel lblIpAddToJack; 
private JLabel lblIpAddConnToJack; 
private JLabel lblPortToJack; 
private JLabel lblPortConnToJack; 
private JLabel lblSlaveId; 
private JLabel lblIcon; 

private JButton btnConnController; 
private JButton btnDiscController; 
private JButton btnConnJack; 
private JButton btnDiscJack; 
private JButton btnConnModbus; 

private JTextArea textAreaConnLog; 

private JTextField textFieldIpAddController; 
private JTextField textFieldPortController; 
private JTextField textFieldIpAddJack; 
private JTextField textFieldPortJack; 
private JTextField textFieldSlaveId; 
private Socket myClient; 

public byte[] message = new byte[5]; 
private static final String modbusConn = "modbusconnect"; 
private static final String modbusDisc = "modbusdisconnect"; 



/** 
* Launch the application. 
*/ 
public static void main(String[] args){ 
    EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      try { 
       InterfaceGUI window = new InterfaceGUI(); 
       window.frame.setVisible(true); 
       //window.receiveMessage(); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
} 

/** 
* Create the application. 
*/ 
public InterfaceGUI() { 
    initialize(); 
} 

public void startRunning() throws IOException{ 
    try { 
     while (true){ 
      System.out.println("receive"); 
      InputStream inFromServer = myClient.getInputStream(); 
      DataInputStream in = new DataInputStream(inFromServer); 
      in.read(message); 
      System.out.println(Arrays.toString(message)); 
     } 
    } catch (EOFException eofexception){ 
     System.out.println("error"); 
    } 
} 

/** 
* Initialize the contents of the frame. 
*/ 
private void initialize() { 
    frame = new JFrame(); 
    frame.setBounds(100, 100, 450, 600); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.getContentPane().setLayout(null); 

    panelController = new JPanel(); 
    panelController.setBorder(new TitledBorder(null, "Connection to Controller", TitledBorder.LEADING, TitledBorder.TOP, null, null)); 
    panelController.setBounds(6, 6, 438, 95); 
    frame.getContentPane().add(panelController); 
    panelController.setLayout(null); 

    lblIpAddController = new JLabel("IP Address :"); 
    lblIpAddController.setBounds(13, 24, 74, 16); 
    panelController.add(lblIpAddController); 

    textFieldIpAddController = new JTextField(); 
    textFieldIpAddController.setBounds(92, 18, 174, 28); 
    panelController.add(textFieldIpAddController); 
    textFieldIpAddController.setColumns(10); 

    btnConnController = new JButton("Connect"); 
    btnConnController.setBounds(278, 18, 154, 29); 
    panelController.add(btnConnController); 
    btnConnController.addActionListener(this); 

    lblPortController = new JLabel("Port :"); 
    lblPortController.setBounds(54, 58, 33, 16); 
    panelController.add(lblPortController); 

    textFieldPortController = new JTextField(); 
    textFieldPortController.setBounds(92, 52, 174, 28); 
    panelController.add(textFieldPortController); 
    textFieldPortController.setColumns(10); 

    btnDiscController = new JButton("Disconnect"); 
    btnDiscController.setBounds(278, 52, 154, 29); 
    panelController.add(btnDiscController); 
    btnDiscController.addActionListener(this); 

    panelJack = new JPanel(); 
    panelJack.setBorder(new TitledBorder(null, "Connection to Jack", TitledBorder.LEADING, TitledBorder.TOP, null, null)); 
    panelJack.setBounds(6, 113, 289, 95); 
    frame.getContentPane().add(panelJack); 
    panelJack.setLayout(null); 

    lblIpAddJack = new JLabel("IP Address :"); 
    lblIpAddJack.setBounds(14, 24, 74, 16); 
    panelJack.add(lblIpAddJack); 

    textFieldIpAddJack = new JTextField(); 
    textFieldIpAddJack.setBounds(93, 18, 106, 28); 
    textFieldIpAddJack.setText("111.111.1.111"); 
    panelJack.add(textFieldIpAddJack); 
    textFieldIpAddJack.setColumns(10); 

    btnConnJack = new JButton("Connect"); 
    btnConnJack.setBounds(200, 20, 86, 29); 
    btnConnJack.setFont(new Font("Lucida Grande", Font.PLAIN, 11)); 
    panelJack.add(btnConnJack); 

    lblPortJack = new JLabel("Port :"); 
    lblPortJack.setBounds(55, 58, 33, 16); 
    panelJack.add(lblPortJack); 

    textFieldPortJack = new JTextField(); 
    textFieldPortJack.setBounds(93, 52, 106, 28); 
    panelJack.add(textFieldPortJack); 
    textFieldPortJack.setColumns(10); 

    btnDiscJack = new JButton("Disconnect"); 
    btnDiscJack.setBounds(200, 52, 86, 29); 
    btnDiscJack.setFont(new Font("Lucida Grande", Font.PLAIN, 11)); 
    panelJack.add(btnDiscJack); 

    panelStatus = new JPanel(); 
    panelStatus.setBorder(new TitledBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null), "Connection Status", TitledBorder.LEADING, TitledBorder.TOP, null, null)); 
    panelStatus.setBounds(6, 220, 438, 126); 
    frame.getContentPane().add(panelStatus); 
    panelStatus.setLayout(null); 

    panelToController = new JPanel(); 
    panelToController.setBorder(new TitledBorder(null, "Connection to Controller", TitledBorder.LEADING, TitledBorder.TOP, null, null)); 
    panelToController.setBounds(6, 20, 208, 94); 
    panelStatus.add(panelToController); 
    panelToController.setLayout(null); 

    lblStatusToController = new JLabel("Status"); 
    lblStatusToController.setBounds(41, 19, 39, 16); 
    panelToController.add(lblStatusToController); 

    lblStatusConnToCont = new JLabel("DISCONNECTED"); 
    lblStatusConnToCont.setForeground(Color.RED); 
    lblStatusConnToCont.setBounds(85, 19, 117, 16); 
    lblStatusConnToCont.setHorizontalAlignment(SwingConstants.CENTER); 
    panelToController.add(lblStatusConnToCont); 

    lblIpAddToController = new JLabel("IP Address :"); 
    lblIpAddToController.setBounds(6, 43, 74, 16); 
    panelToController.add(lblIpAddToController); 

    lblIpAddConnToCont = new JLabel("New label"); 
    lblIpAddConnToCont.setBounds(113, 43, 61, 16); 
    lblIpAddConnToCont.setHorizontalAlignment(SwingConstants.CENTER); 
    panelToController.add(lblIpAddConnToCont); 

    lblPortToController = new JLabel("Port :"); 
    lblPortToController.setBounds(47, 66, 33, 16); 
    panelToController.add(lblPortToController); 

    lblPortConnToCont = new JLabel("New label"); 
    lblPortConnToCont.setBounds(113, 66, 61, 16); 
    lblPortConnToCont.setHorizontalAlignment(SwingConstants.CENTER); 
    panelToController.add(lblPortConnToCont); 

    panelToJack = new JPanel(); 
    panelToJack.setBorder(new TitledBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null), "Connection to Jack", TitledBorder.LEADING, TitledBorder.TOP, null, null)); 
    panelToJack.setBounds(218, 20, 214, 94); 
    panelStatus.add(panelToJack); 
    panelToJack.setLayout(null); 

    lblStatusToJack = new JLabel("Status"); 
    lblStatusToJack.setBounds(41, 19, 39, 16); 
    panelToJack.add(lblStatusToJack); 

    lblStatusConnToJack = new JLabel("DISCONNECTED"); 
    lblStatusConnToJack.setForeground(Color.RED); 
    lblStatusConnToJack.setBounds(85, 19, 123, 16); 
    lblStatusConnToJack.setHorizontalAlignment(SwingConstants.CENTER); 
    panelToJack.add(lblStatusConnToJack); 

    lblIpAddToJack = new JLabel("IP Address :"); 
    lblIpAddToJack.setBounds(6, 43, 74, 16); 
    panelToJack.add(lblIpAddToJack); 

    lblIpAddConnToJack = new JLabel("New label"); 
    lblIpAddConnToJack.setBounds(116, 43, 61, 16); 
    lblIpAddConnToJack.setHorizontalAlignment(SwingConstants.CENTER); 
    panelToJack.add(lblIpAddConnToJack); 

    lblPortToJack = new JLabel("Port :"); 
    lblPortToJack.setBounds(47, 66, 33, 16); 
    panelToJack.add(lblPortToJack); 

    lblPortConnToJack = new JLabel("New label"); 
    lblPortConnToJack.setBounds(116, 66, 61, 16); 
    lblPortConnToJack.setHorizontalAlignment(SwingConstants.CENTER); 
    panelToJack.add(lblPortConnToJack); 

    panelModbus = new JPanel(); 
    panelModbus.setBorder(new TitledBorder(null, "Modbus", TitledBorder.LEADING, TitledBorder.TOP, null, null)); 
    panelModbus.setBounds(296, 113, 148, 95); 
    frame.getContentPane().add(panelModbus); 
    panelModbus.setLayout(null); 

    lblSlaveId = new JLabel("ID :"); 
    lblSlaveId.setBounds(33, 24, 22, 16); 
    panelModbus.add(lblSlaveId); 

    textFieldSlaveId = new JTextField(); 
    textFieldSlaveId.setBounds(60, 18, 82, 28); 
    panelModbus.add(textFieldSlaveId); 
    textFieldSlaveId.setColumns(10); 

    lblIcon = new JLabel("icon"); 
    lblIcon.setBounds(17, 52, 32, 35); 
    panelModbus.add(lblIcon); 
    Image imgDisconnect = new ImageIcon(this.getClass().getResource("red-unlock-icon.png")).getImage(); 
    lblIcon.setIcon(new ImageIcon(imgDisconnect)); 

    btnConnModbus = new JButton("Connect"); 
    btnConnModbus.setBounds(60, 51, 82, 29); 
    panelModbus.add(btnConnModbus); 

    panelLog = new JPanel(); 
    panelLog.setBorder(new TitledBorder(null, "Connection Log", TitledBorder.LEADING, TitledBorder.TOP, null, null)); 
    panelLog.setBounds(6, 358, 438, 214); 
    frame.getContentPane().add(panelLog); 
    panelLog.setLayout(null); 

    textAreaConnLog = new JTextArea(); 
    textAreaConnLog.setBounds(6, 19, 426, 189); 
    panelLog.add(textAreaConnLog); 
} 

@Override 
public void actionPerformed(ActionEvent ae) { 
    // TODO Auto-generated method stub 
    if(ae.getSource() instanceof JButton){ 
     if(ae.getSource() == btnConnController){ 
      //check validity ip dan port number later on 
      try { 
       myClient = new Socket("192.168.1.104", 1234); 
       if(myClient.isConnected() == true){ 
        textAreaConnLog.setText("connected to 192.168.1.104 at port 1234"); 
        lblStatusConnToJack.setText("CONNECTED"); 
        lblStatusConnToJack.setForeground(Color.GREEN); 
       } 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 
    } 
} 

}зацикливание функции и получения байтов в Java

Я в настоящее время строит клиентскую программу, чтобы получить транслируемое сообщение на сервере. Просто хочу четко прояснить, правильно ли метод startRunning() будет продолжать цикл, не называя его? Кроме того, входящие данные в форме байтов, могу ли я использовать метод .read (message) для чтения и хранения данных в сообщении []?

ответ

0

Правильно ли, что метод startRunning() будет продолжать цикл без каких-либо вызовов?

Вы должны вызвать метод startRunning() хотя бы один раз, чтобы он начал выполнять свой код; после этого блок while будет продолжать цикл бесконечно, если не произойдет исключение.

Кроме того, входящие данные в форме байтов, могу ли я использовать метод .read (message) для чтения и хранения данных в сообщении []?

Да, вы можете. Смотрите это link для спецификации

Если я мог бы добавить подсказку:

private boolean Continue = true; 

public void setContinue(boolean b) 
{ 
    Continue = b; 
} 


public void startRunning() throws IOException 
{ 
    DataInputStream in; 
    try 
    { 
     while (Continue) 
     { 
      System.out.println("receive"); 
      InputStream inFromServer = myClient.getInputStream(); 
      in = new DataInputStream(inFromServer); 
      in.read(message); 
      System.out.println(Arrays.toString(message)); 
     } 
    } 
    catch (EOFException eofexception) 
    { 
     System.out.println("error"); 
    } 
    catch(Exception ex) 
    { 
     in.close(); 
     throw ex; 
    } 
} 

Обратите внимание на состояние в то время как петли. Это сделает ваш код более восприимчивым к прерываниям, если они вам понадобятся; потоки не должны открываться бесконечно.

Кроме того, вы должны закрыть поток, когда происходит исключение.

Смежные вопросы