estou quebrando a cabeça em um exercício onde preciso criar um sistema que calcule o rendimento de acordo com os valores passados no JTextField (ainda não fiz a formula de calculo), porém está dando o seguinte erro ao executar o programa:
Exception in thread “main” java.lang.NumberFormatException: empty String
at java.base/jdk.internal.math.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1842)
at java.base/jdk.internal.math.FloatingDecimal.parseDouble(FloatingDecimal.java:110)
at java.base/java.lang.Double.parseDouble(Double.java:549)
at com.ap.Poupex.(Poupex.java:40)
at com.ap.test.main(test.java:8)
é que o valor só será preenchido depois que o programa for executado e o valor foi digitado dentro do TextField, não sei como implementar neste sentido.
o erro ocorre no parseDouble que passa uma empty String, meu problema é que eu preciso armazenar o valor digitado dentro do JTextField quando o programa ja for executado, e este erro nao me deixa executar o programa
Você acabou de instanciar o JTextField, não vai ter nada digitado dentro dele.
Você não pôs um botão OK na tela?
Então, calcula só quando clicar nesse botão.
Exemplo:
import java.awt.Color;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class Poupex extends JFrame {
private JTextField txtJurosMes;
private JTextField txtNumeroAnos;
private JTextField txtDepositoMensal;
private JLabel labelTotalPoupado;
public Poupex() {
// JFrame
setTitle("Poupex");
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setSize(600, 400);
setResizable(false);
// JPanel
JPanel P = new JPanel();
P.setBackground(Color.gray);
P.setLayout(null);
JLabel juroMes = new JLabel("Juros ao mês%: ");
juroMes.setBounds(40, 40, 100, 40);
JLabel NumAnos = new JLabel("Número de anos: ");
NumAnos.setBounds(40, 80, 100, 40);
JLabel Depmensal = new JLabel("Deposito mensal: ");
Depmensal.setBounds(40, 120, 140, 40);
labelTotalPoupado = new JLabel("Total poupado R$: ");
labelTotalPoupado.setBounds(40, 160, 140, 40);
txtJurosMes = new JTextField();
txtJurosMes.setBounds(160, 40, 200, 30);
txtNumeroAnos = new JTextField();
txtNumeroAnos.setBounds(160, 80, 200, 30);
txtDepositoMensal = new JTextField();
txtDepositoMensal.setBounds(160, 120, 200, 30);
JButton ok = new JButton("OK");
ok.addActionListener(event -> clicouNoBotaoOk());
ok.setBounds(380, 260, 150, 40);
add(P);
P.add(juroMes);
P.add(NumAnos);
P.add(Depmensal);
P.add(labelTotalPoupado);
P.add(ok);
P.add(txtJurosMes);
P.add(txtNumeroAnos);
P.add(txtDepositoMensal);
}
private void clicouNoBotaoOk() {
double jurosMes = Double.parseDouble(txtJurosMes.getText());
int anos = Integer.parseInt(txtNumeroAnos.getText());
double depositoMensal = Double.parseDouble(txtDepositoMensal.getText());
double totalPoupado = /* aqui você faz seu cálculo */;
labelTotalPoupado.setText(String.format("Total poupado R$: %.2f", totalPoupado));
}
}