Recebendo NumberFormatException depois de certa quantidade de caracteres

Olá,
Sou novo com programação e, para treinar, estou fazendo uma calculadora usando JavaFX.
Eu criei uma tela com uma serie de botões (igual uma calculadora) e um TextField para mostrar os inputs e resultados. Criei uma variável inteira e estou convertendo o conteúdo do TextField para Inteiro e armazenando naquela variável. Para testar coloquei um sysout nos botões para ver qual numero estava retornando.

Estava indo super bem, mas depois de uma certa quantidade de caracteres ele me retorna um NumberFormatException.

Segue a exceção:

Caused by: java.lang.NumberFormatException: For input string: "12121212121212121212"
	at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
	at java.lang.Long.parseLong(Long.java:592)
	at java.lang.Long.parseLong(Long.java:631)
	at gui.MainViewController.onBt2Action(MainViewController.java:102)
	... 58 more

Alguém conseguiria me ajudar a resolver?

Edit: está aparecendo Long na exceção pois tentei converter primeiro em Inteiro, pensando que era limitação do inteiro, troquei para Double e depois Long.

Onde está o código? Sem a codificação que tu fez fica difícil ajudar.

Valor máximo de um long:   9223372036854775807
Valor que você usou:      12121212121212121212

Criei uma ação para cada botão, e como estou usando um textfield no JavaFX que só trabalha com Strings, estou “somando” as Strings e depois convertendo para int:

public void onBt1Action(ActionEvent event) {
        if (result != null){
            resetResults();
        }

        if(textField.getText() == null){
            textField.setText("1");

            text = textField.getText();
            if (operationPressed == true) {
                number2 = Integer.parseInt(textField.getText());
            } else {
                number1 = Integer.parseInt(textField.getText());
            }
        } else {
            text = textField.getText();
            textField.setText(text + "1");

            text = textField.getText();
            if (operationPressed == true) {
                number2 = Integer.parseInt(textField.getText());
            } else {
                number1 = Integer.parseInt(textField.getText());
            }
        }
        System.out.println(number1);
    }

Aquele sysout no final é a String de retorno da excesão… essa ação ocorre sempre que eu aperto o botão 1 na “calculadora”

Valor máximo de um long: 9223372036854775807
Valor que você usou: 12121212121212121212

Hmm… sabe alguma maneira de limitar o numero de caracteres escritos no TextField no JavaFX? Eu imaginava que o long recebia um valor maior kkk

Usei o código if (text.length() < 10) para saber se o TextField está ultrapassando quatidade de caracteres de um inteiro e parar a adição de novos numeros.
Já na hora de finalizar a operação matemática eu usei o codigo:

    if (result > 999999999) {
        text = String.format("%d", result);
        int i;
        Integer first = Integer.parseInt(String.valueOf(text.charAt(0)));
        i = text.length() - 1;
        textField.setText("aprox " + first + "e" + i);
    } else {
        textField.setText((String.format("%d", result)));
    }

Convertendo números maiores que um inteiro para notação científica.
Acho que o meu problema com os Longs acabou kkkk

Se tiverem alguma dica para um iniciante, eu agradeço. Muito obrigado pela ajuda!

Um long possui 64 bits, logo o maior valor positivo binário que ele comporta é:

01111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111
 byte 7   byte 6   byte 5   byte 4   byte 3   byte 2   byte 1   byte 0

Em decimal isso equivale à:

‭9.223.372.036.854.775.807‬