Utilizzo il seguente codice per impedire l'inserimento, in un componente swing (jtextfield), di caratteri che non siano numeri.

codice:
public class LimitNumberDocument extends PlainDocument{

	private static final long serialVersionUID = -6829435640064907333L;
	
	private int max_length = 0;
    
    public LimitNumberDocument(int max_length) {
        this.max_length = max_length;
    }
    
    public void insertString(int offs, String str, AttributeSet a)
        throws BadLocationException{
            try{
                //se aggiungo numeri negativi ritorno
                //if(Integer.parseInt(str) < 0) {
            	if(Long.parseLong(str) < 0) {
                	System.err.println("numero negativo non ammesso");
                    return;
                }
            }
            catch(NumberFormatException e){            	
                //se non è un numero ritorno
            	System.err.println("NumberFormatException");
                return;
            }            

            int chNumberInsert = getText(0, offs).length();
            int chNumberToInsert = str.length();
            int chNumberMax = chNumberInsert + chNumberToInsert;
            if (chNumberMax <= max_length)
                super.insertString(offs, str, a);
            else
            	System.out.println("numero di lunghezza superiore a quella permessa per il campo");
        }

    }
Purtroppo se inserirsco un numero troppo lungo, ad esempio: 666666666666666666666
il codice riportato mi eccede nel punto Long.parseLong, ed il numero non viene accettato

Come faccio ad evitare questo problema?