2015-04-14 3 views
1

У меня возникает ошибка в коде, в котором указывается ошибка исключения номера в формате. Я пытаюсь принять IP-адрес ex.172.16.10.100 & Маска подсети 255.255.255.0. После принятия значения, я пытаюсь преобразовать их как десятичные в двоичный формат. Я получаю ошибку в этой строке IPaddress = IPaddress + printBinaryFormat(octet[i]);Ошибка исключения в формате номера в коде

Не могли бы вы предложить мне, как можно решить эту проблему?

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.text.MaskFormatter; 
import javax.swing.*; 
import java.text.ParseException; 
import java.util.regex.Pattern; 
import java.math.BigInteger; 
import java.util.Arrays; 
import java.util.StringTokenizer; 

public class update extends JPanel implements ActionListener 
{ 
private JButton cmdCalculate; 
public JFormattedTextField txtIP, txtSub;//Object name txtIP,txtSub 
private JLabel lblCalculate, lblIP, lblSub, lblNetwork, lblHost; 
private static String IPaddress = "",Subenetaddress= "", Networkaddress= "", Lastaddress= ""; 
private JPanel panAnswerArea, panNorthArea, panBase, panAddressGrid, panIP, panSub, panButton; 

public update() 
{ 

    super.setLayout(new BorderLayout());  
    cmdCalculate = new JButton("Calculate"); 
    cmdCalculate.addActionListener(this); 
    lblIP = new JLabel("IP Address: "); 
    lblSub = new JLabel("Subnet Mask: "); 
    panIP = new JPanel(); 
    panSub = new JPanel(); 
    panIP.add(lblIP); 
    panSub.add(lblSub); 
    MaskFormatter mf = null; 

    try { 
     mf = new MaskFormatter("***.***.***.***"); 

    } catch (ParseException e) { 
     e.printStackTrace(); 
    } 

    txtIP = new JFormattedTextField(mf); 
    panIP.add(txtIP); 
    txtIP.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 12)); 
    txtIP.setPreferredSize(new Dimension(150, 24)); 


    txtSub = new JFormattedTextField(mf); 
    panSub.add(txtSub); 
    txtSub.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 12)); 
    txtSub.setPreferredSize(new Dimension(150, 24)); 

    lblCalculate = new JLabel("Calculate Network and Host parts: ", JLabel.LEFT); 
    lblNetwork = new JLabel("Network address: ", JLabel.LEFT); 
    lblHost = new JLabel("Host address: ", JLabel.LEFT); 

    lblNetwork.setText("Network address: "); 
    lblHost.setText("Host address: "); 

    panAnswerArea = new JPanel(new BorderLayout()); //Stores the network and host addresses 
    panNorthArea = new JPanel(new BorderLayout()); //North has the base radio buttons, the south has the IP/Subnet 
    panAddressGrid = new JPanel(new GridLayout(4,2)); //Stores the IP, subnet address and the calculate button 
    panButton = new JPanel(); 


    panAnswerArea = new JPanel(new BorderLayout()); //Stores the network and host addresses 
    this.add(panAnswerArea, BorderLayout.SOUTH); 
    panAnswerArea.add(lblNetwork, BorderLayout.NORTH); 
    panAnswerArea.add(lblHost, BorderLayout.SOUTH); 

    panNorthArea = new JPanel(new BorderLayout()); 
    this.add(panNorthArea, BorderLayout.NORTH); 
    panNorthArea.add(panAddressGrid, BorderLayout.SOUTH); 
    panAddressGrid.add(panIP); 
    panAddressGrid.add(panSub); 
    panAddressGrid.add(panButton); 
    panButton.add(lblCalculate); 
    panButton.add(cmdCalculate); 
} 
public void actionPerformed (ActionEvent e) 
{ 
    String strIP= ""; 
    String strSub= ""; 
    String IPaddress = "",Subenetaddress= "", Networkaddress= "", Lastaddress= "", inversbits= "",inversesubnetmask= ""; 
    strIP = txtIP.getText(); 
    strSub = txtSub.getText(); 

    StringTokenizer st; 
    String[]octet=new String[4]; 
    st = new StringTokenizer(strIP,"."); 

    for(int i =0;i!=4;i++) 
    { 
     octet[i]=st.nextToken(); 
     IPaddress = IPaddress + printBinaryFormat(octet[i]);//problem is here 


    } 


} 

private static String printBinaryFormat(String number) 
{ 
    int decNum = Integer.parseInt(number),length = 0; 
    String binary = "", answer = ""; 

    while(decNum > 0){ 

     binary += Integer.toString (decNum %2); 

     decNum= decNum/2; 

    } 
    length = binary.length(); 

    for (int padding = (8 - length); padding > 0; padding--) 
    { 
     answer += "0"; 
    } 

    for (int i = length; i > 0; i--) 
    { 
     answer += binary.charAt(i - 1); 
    } 

    return answer; 
} 
public static void main(String[] args) 
{ 
    JFrame.setDefaultLookAndFeelDecorated(true);// decorated the border 
    JFrame frame = new JFrame("Subnet Calculators"); //Title 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    //frame.setSize(500, 600); 

    JComponent paneMain = new update(); 
    paneMain.setOpaque(true); 
    paneMain.setPreferredSize(new Dimension(500, 300));// It works of the size of the frame 
    frame.setContentPane(paneMain); 
    frame.pack(); 
    frame.setVisible(true); 
} 

}

+0

Можете ли вы объявление d полная трассировка стека на ваш вопрос? – RealSkeptic

+0

Пожалуйста, отрегулируйте свой код до необходимой части, а не просто публикуйте все. – Turing85

+0

попытайтесь напечатать 'txtIP.getText()' в журнале. проверьте, содержит ли значение другой символ, кроме точки (.) и цифр. Кажется, он содержит некоторые пробелы, которые приводят к 'numberformatexception' – Razib

ответ

0

Изменить эту строку:

int decNum = Integer.parseInt(number), length = 0; 

To:

int decNum = Integer.parseInt(number.trim()), length = 0; 

Или:

int decNum = Integer.parseInt(number.replaceAll(" ", "")), length = 0; 
+0

Отличное предложение! его работа. Спасибо за вашу помощь. – jisan