繁体   English   中英

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

[英]java get value from JTextField and set it as BigInteger

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

我在firstClass中创建了一个文本字段,假设它是txtStringNumber。

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

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

我必须将它作为String传递给secondClass,并将strNumber作为BigInteger值。

在第二个类中,我创建了一个从firstClass获取txtStringNumber值的方法,例如tis:

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,并在任何人没有机会在其中输入文本之前从其文本字段获取String。 因此,它为空并不奇怪。

解决方案:不要这样做! 仅在输入有意义的内容后才能获取文本。 我猜想您有两个firstClass对象,一个已显示,并在此方法中创建了第二个,并以魔术般的思维犯了罪,即对显示对象的更改将反映在新创建的对象中,但这不是编程的工作原理。 而是将显示对象的有效引用传递给需要该对象的其他对象。

您正在theNumbers方法中创建firstClass的新实例( firstClass f = new firstClass(); ),将文本字段的值设置为任何有用的值(尤其是用户设置)的可能性很小

你要么需要提供的一种手段firstClass从文本字段传递价值secondClass ,很可能是通过某种形式的setter方法(这是典型的生产者-消费者模式 )或设立一个机制firstClass通知secondClass当值变化然后让secondClass检索该值(这是一个类观察器模式 )。

无论如何,您都不应该创建这些类的新实例,而是需要创建它们,然后将这些实例传递给任何将要充当控制器的实例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM