2012-01-16 4 views
0

Я очень новичок в Java, который требуется для проекта разработки приложений Blackberry (что я и делаю сейчас). Моя проблема в том, что я пытаюсь использовать этот класс, который я нашел онлайн (прилагается ниже), чтобы реализовать функцию уведомления в моем приложении. Как я уже сказал, я очень новичок в Java, поэтому не знаю, как назвать setVisible1 из другого класса, скажем, UserInterface. Я попытался MyAppIndicator._indicator.setVisible1(true,1);, но это приводит к ошибке:Java: функция вызова из разных классов

«Метод setVisible1 (логическое, целое) не определено для типа ApplicationIndicator».

Любая помощь будет принята с благодарностью. Благодаря!

public class MyAppIndicator 
{ 
    public ApplicationIndicator _indicator; 
    public static MyAppIndicator _instance; 
    private MyAppIndicator() {} 

    public static MyAppIndicator getInstance() { 
     if (_instance == null) { 
      _instance = new MyAppIndicator(); 
     } 

     return(_instance); 
    } 

    public void setupIndicator() { 
     //Setup notification 
     if (_indicator == null) { 
      ApplicationIndicatorRegistry reg = ApplicationIndicatorRegistry.getInstance(); 
      _indicator = reg.getApplicationIndicator(); 

      if(_indicator == null) { 
       ApplicationIcon icon = new ApplicationIcon(EncodedImage.getEncodedImageResource ("status_icon_24x24.png")); 
       _indicator = reg.register(icon, false, true); 
       _indicator.setValue(0); 
       _indicator.setVisible(false); 
      } 
     } 
    } 

    public void setVisible1 (boolean visible, int count) { 
     if (_indicator != null) { 
      if (visible) { 
       _indicator.setVisible(true); 
       _indicator.setValue(count); 
      } else { 
       _indicator.setVisible(false); 
      } 
     } 
    } 
} 
+0

Попробуйте только MyAppIndicator.setVisible1 (правда, 1); – bschultz

+0

Пожалуйста, откорректируйте свой код правильно. –

ответ

1

Для вызова методов из классов в Java, вам нужен экземпляр класса (или, если класс «статический» вы можете непосредственно использовать методы, а «static» в основном означает только 1 экземпляр).

В вашем случае MyAppIndicator реализует Singleton:

public static MyAppIndicator _instance; 
private MyAppIndicator() {}; 

public static MyAppIndicator getInstance() { 
    if (_instance == null) { 
     _instance = new MyAppIndicator(); 
    } 

    return(_instance); 
} 

Это означает, что при вызове GetInstance() вернет экземпляр MyAppIndicator если такой экземпляр уже существует, или он будет создавать новую, если нет экземпляра.

После приобретения экземпляра класса вы просто называете его методами, если у них есть соответствующие модификаторы доступа. В вашем случае у setVisible1 есть модификатор доступа 'public', поэтому вы сможете позвонить ему за пределами MyAppIndicator.

Так в коде:

а) получение экземпляра:

MyAppIndicator instanceOfMyAppIndicator = MyAppIndicator.getInstance(); 

б) вызов метода:

instanceOfMyAppIndicator.setVisible1(true,1); 
+0

Большое спасибо, это было решение, также очень четкое объяснение! – user1152440

0

Глядя на приведенный выше код, вы должны позвонить

MyAppIndicator.getInstance().setVisible1(true,1); 

чем

MyAppIndicator._indicator.setVisible1(true,1); 
+0

Обратите внимание, что второй вызов приведет к исключению NullPointerException, если ранее не был вызван метод getInstance(). – atk

+0

Второй вызов приведет к ошибке «Метод setVisible1 (boolean, int) не определен для типа ApplicationIndicator». Я говорил, что нужно вызвать MyAppIndicator.getInstance(). SetVisible1 (true, 1); NOT MyAppIndicator._indicator.setVisible1 (true, 1); – Rabi

0
 
boolean visible = ...; // you need to set something here 
int count = ...; // you need to set something, here 
MyAppIndicator mai = MyAppIndicator.getInstance(); 
mai.setVisible1(visible, count); 
  • setVisible1() является регулярный, открытый метод, так что любой другой класс может вызывать метод в экземпляре класса MyAppIndicator.
  • вам необходимо передать тот же номер & тип аргументов для setVisible1(), как указано в его определении. Определение читает setVisible1 (boolean visible, int count), поэтому вам нужно передать логическое и целое число. Соглашение Java заключается в том, что передача «истина», скорее всего, сделает индикатор видимым, а «false» скроет его. Int необычен, но, читая код, он игнорируется, поэтому передавайте все, что захотите.
  • Чтобы получить экземпляр класса, вы обычно пишите new ClassName. Однако MyAppIndicator объявляет конструктор как закрытый, поэтому другие классы не могут его вызывать. Вместо этого myAppIndicator предоставляет метод getInstance(), который будет обрабатывать объект для вас.

Вы также должны прочитать учебное пособие по Java - у них есть далекое лучшее описание всего этого.

0

Вы можете сделать следующее:

MyAppIndicator myAppIndicator = MyAppIndicator.getInstance(); 
myAppIndicator.setVisible1(true,1); 
+0

Спасибо, что это было решение, я ценю это! – user1152440

+0

Тогда дайте это upvote plz;) – krackmoe

+0

Я бы, но недостаточно репутация :( – user1152440

Смежные вопросы