OK.在花了几个小时试图让事情顺利进行之后,我放弃了。
基本上,我正在创建一个程序,其中用户输入一些值,然后在点击按钮后创建一个新场景,并根据给定的值,发生不同的事情。我的问题 - 我创建了"设置.class",其中包含一些带有 getter 和 setter 的变量。我的假设是将输入的值存储在那里,并且在需要时,我可以使用getter轻松访问它们。由于某种原因,它不起作用。
请记住,我尽可能地简化了它,因为它看起来非常混乱,如果我粘贴原始代码,它会很长。我确保问题的核心是相同的。
设置类:
public class Settings {
private boolean diamonds;
public boolean getDiamonds() {
return diamonds;
}
public void setDiamonds(boolean diamonds) {
this.diamonds = diamonds;
}
}
控制器类:
public class Controller implements Initializable {
private Settings settings = new Settings();
private ProblematicOne prob = new ProblematicOne();
public void handleGoAction() throws IOException {
settings.setDiamonds(true);
prob.editText("This shall be set");
/* ..creating new stage and scene here no reason to paste it here, no probs with that.. */
@Override
public void initialize(URL location, ResourceBundle resources) {
}
}
}
和奶油,有问题的类:
public class ProblematicOne{
private Setting settings = new Settings();
String toBeEdited = ""; //
public void editText(String text){
if(settings.getDiamonds){ // for some reason it doesn't work; The getter returns false.
toBeEdited = text;
}else if(!settings.getDiamonds){
toBeEdited = "getDiamonds is false";
}
}
}
好的,首先,您尝试做的事情可以通过序列化对象(即设置(并存储它来实现。或者,更简单地说,只需写入带有值的文件,并在要实例化类时从那里加载。
看看你的"有问题的人"中的这一行 private Setting settings = new Settings();
您刚刚创建了"设置"的新实例。此实例不知道控制器中的设置实例。
另一种方法是将设置类设置为单例,然后重用它。例:
设置.java
public class Settings {
private static Settings instance = null;
private boolean diamonds;
public boolean getDiamonds() {
return diamonds;
}
public void setDiamonds(boolean diamonds) {
this.diamonds = diamonds;
}
private Settings() {}
public static Settings getInstance(){
return instance == null ? new Settings() : instance;
}
}
然后在控制器类中,只需使用 getInstance()
方法获取实例;
private Settings settings = Settings.getInstance();
同样,当您在 ProblemOne 类中再次使用它时,请使用 getInstance()
方法
您的问题是 ProblemClass 创建了一个新的设置实例,因此无法访问该值。您需要将相同的实例传递到另一个类中,或者将设置类中的变量设置为静态,以便您可以在没有实例的情况下访问它们:
public class Settings {
private static boolean diamonds;
public static boolean getDiamonds() {
return diamonds;
}
public static void setDiamonds(boolean diamonds) {
this.diamonds = diamonds;
}
}
并在没有实例的情况下使用它:
Settings.setDiamonds(true);
Settings.getDiamonds();
在以下类中没有将值设置为设置对象,您正在尝试使用 get,它将返回默认值。
public class ProblematicOne{
private Setting settings = new Settings();
String toBeEdited = ""; //
public void editText(String text){
if(settings.getDiamonds){ // for some reason it doesn't work; The getter returns false.
toBeEdited = text;
}else if(!settings.getDiamonds){
toBeEdited = "getDiamonds is false";
}
}
}
如果要使用在控制器中创建的设置对象,则将设置对象传递给 ProblemOne 类中的 editText 方法。
问题是你正在实例化设置类两次。您设置
settings.setDiamonds(true); //in one instance
并且您希望在类 ProblemOne 的第二个实例中检索此值。尝试通过在控制器类中仅实例化一次设置并将其传递给 ProblemOne 来解决此问题。构建代码,以便实例化
private Setting settings = new Settings();
在整个应用程序中只有一次。考虑使此类成为单例。在此处阅读有关单例实例化的信息http://www.javaworld.com/article/2073352/core-java/simply-singleton.html