我在一个包中有两个类: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
检索该值(这是一个类观察者模式)。
在任何情况下,你不应该创建这些类的新实例,你需要创建它们,然后将这些实例传递给任何一个将作为控制器…