行。在花了几个小时试图让事情发挥作用后,我放弃了。
基本上我正在创建一个用户输入一些值的程序,然后在按下按钮后创建一个新场景,并根据给出的值,发生不同的事情。 我的问题 - 我创建了“Settings.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) {
}
}
}
和crèmedelacrème,有问题的课程:
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";
}
}
}
答案 0 :(得分:1)
好吧,首先,您可以通过序列化对象(即设置)并存储它来实现您要做的事情。或者,更简单,只需要写入带有值的文件,并在想要实例化类时从那里加载。
在你的" ProblematicOne"中查看这一行。
private Setting settings = new Settings();
您刚刚创建了一个新的设置实例。此实例不了解Controller中的Settings实例。
另一种方法是让您的Settings类成为单例,然后重复使用它。例如:
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;
}
}
然后在Controller类中,使用getInstance()
方法获取实例;
private Settings settings = Settings.getInstance();
同样,当您在ProblematicOne类中再次使用它时,请使用getInstance()
方法
答案 1 :(得分:0)
您的问题是ProblematicClass会创建一个新的设置实例,因此无法访问该值。您需要将同一个实例传递给另一个类,或者将设置类中的变量设置为静态,这样您就可以在不使用实例的情况下访问它们:
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();
答案 2 :(得分:0)
在下面的类中没有设置对象的设置值,你试图使用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";
}
}
}
如果要使用在控制器中创建的设置对象,则将设置对象传递给ProblematicOne类中的editText方法。
答案 3 :(得分:0)
问题是你实例化设置类两次。你设置
settings.setDiamonds(true); //in one instance
并且您希望在QuestionmaticOne类中的第二个实例中检索此值。 尝试通过在Controller类中仅实例化一次Settings并将其传递给ProblematicOne来解决此问题。对代码进行框架以便实例化
private Setting settings = new Settings();
在整个申请中只有一次。考虑使这个类单身。在这里阅读关于单例实例化的内容 http://www.javaworld.com/article/2073352/core-java/simply-singleton.html