Java Observer / Observable

时间:2018-03-21 15:13:41

标签: java observable

我必须为可观察者和观察者创建代码。每个观察者都有自己的更新"你已经知道的方法。

在我的可观察代码中,我使用了" notifyObservers"方法。它的参数是一个字符串数组,包含关于我的项目的信息(命令编号,汉堡名称,饮料名称等)。

我的观察者的更新方法仍然存在错误,我不知道它来自哪里。它的两个参数是observable和包含我已经指定的信息的字符串数组。

这是我的代码

public void update(Observable arg0, Object arg1)
{
    if (!(arg0 instanceof BDCommande))
        System.out.println("Objet émetteur inconnu\n");
    if (arg1 instanceof String[]) {
        String[] labels = new String[5];
        labels = (String[]) arg1;
    }
    else
        System.out.println("Type de message inconnu");
    int num = Integer.parseInt(labels[0]);
}

在方法的最后一行检测到错误,标签[0]似乎无法识别。

如果有人可以在这里帮助我,那就太酷了。 谢谢 ! (抱歉我的英语很差,我是法国人)

2 个答案:

答案 0 :(得分:0)

您的错误来自您对labels的定义。只需将其更改为

public void update(Observable arg0, Object arg1)
{
    String[] labels = new String[5];
    if (!(arg0 instanceof BDCommande))
        System.out.println("Objet émetteur inconnu\n");
    if (arg1 instanceof String[]) {
      //  String[] labels = new String[5];
        labels = (String[]) arg1;
    }
    else
        System.out.println("Type de message inconnu");
    int num = Integer.parseInt(labels[0]);
}

并确保您的labels确实已初始化。因为如果(arg1 instanceof String[])false,那么您将获得NullPointerException

答案 1 :(得分:0)

您在if语句中声明了labels变量,这意味着它的范围仅限于if块。如果您需要访问它,您应该在外面声明它,如下所示:

public void update(Observable arg0, Object arg1) {
   String[] labels = new String[5];
   if (!(arg0 instanceof BDCommande)) {
      System.out.println("Objet émetteur inconnu\n");
   }
   if (arg1 instanceof String[]) {
      labels = (String[]) arg1;
   }
   else {
      System.out.println("Type de message inconnu");
   }
   int num = Integer.parseInt(labels[0]);
}