java从JTextField中获取值,并将其设置为BigInteger



我在一个包中有两个类:firstClass和secondClass。

我在firstClass中创建了一个textfield,假设它是txtStringNumber。

我在firstClass中创建了一个方法来获取txtStringNumber值,如下所示:

public String getStrNumber(){
    String strNumber = txtStringNumber.getText();
    return strNumber;
}

我必须把它作为字符串传递给secondClass,并把strNumber作为BigInteger值。

在第二个类中,我创建了一个方法来从firstClass获取txtStringNumber的值,如下所示:

public static String theNumbers(){
     firstClass f = new firstClass();
     return f.getStrNumber();
 }
public static String strAllNumbers = theNumbers();

当我在secondClass中打印strAllNumbers时,它打印的是正确的值。然后我加上:

public static BigInteger bigAllNumbers = new BigInteger(strAllNumbers);

在我看来,它应该有效。但在现实中,它不是。发生错误。

检查错误,这里显示:

throw new NumberFormatException("Zero length BigInteger");

我猜BigInteger接受strAllNumbers为空。但是就像我已经说过的,当我直接打印strAllNumbers而不将其设置为BigInteger时,它会返回正确的值。

这里出了什么问题,我该如何解决这个问题?

您正在创建一个firstClass对象f,并在任何人有机会在其中输入文本之前从其文本字段中获取字符串。所以不奇怪它是空的。

解决方案:不要这样做!只有在输入有意义的内容后才能获得文本。我猜您有两个firstClass对象,一个在此方法中显示,另一个在此方法中创建,并且错误地认为对显示对象的更改将反映在新创建的对象中,但这不是编程的工作方式。相反,将显示对象的有效引用传递给需要它的其他对象。

您正在theNumbers方法(firstClass f = new firstClass();)中创建firstClass的新实例,这是非常不可能的文本字段的值已设置为任何有用的(特别是由用户)

您要么需要提供firstClass的手段将值从文本字段传递到secondClass,可能通过某种setter(这是经典的生产者-消费者模式),或者为firstClass设置一种机制,当值发生变化时通知secondClass,然后让secondClass检索该值(这是一个类观察者模式)。

在任何情况下,你不应该创建这些类的新实例,你需要创建它们,然后将这些实例传递给任何一个将作为控制器…

最新更新