2016-07-26 5 views
0

у меня есть 1 внешний класс с 1 внутренним классом, как это:метод Java не работает в вложенных классов

public class Outer extends PircBot { 
... 
public class Inner extends SessionAdapter { 
...  
} 
} 

Внутри этого Inner класса я пытаюсь вызвать метод, называемый sendMessage(..), который находится внутри PircBot (а не в Outer класса Но, конечно, я знаю, что все поля в Outer и Pircbot классах наследуются в Inner классе).

@Override 
public void messageReceived(SessionEvent event) { //This method is inside SessionAdapter class which I am extending in my Inner class 
Outer.this.sendMessage(event.getMessage()); //This method is inside Pircbot class which I am extending in my Outer class 
} 

Я знаю, что метод sendMessage(..) вызывается. Но по какой-то причине я не вижу этого сообщения в чате Twitch (эта программа отправляет чат-сообщения в Twitch Chat. Эти сообщения чата принимаются от Yahoo Chat Messenger с моего телефона при вводе их). Может ли кто-нибудь увидеть, что не так с моим кодом?

+0

Если вы знаете, что вызывается sendMessage, ваша проблема, вероятно, заключается в методе sendMessage (который вы не публиковали). Это затрудняет помощь. – Mark

+0

Хорошо, я прочитал это, и вы можете закрыть это, насколько я могу судить, но я должен упомянуть, что я не тот, кто отдал предпочтение этому вопросу, так что кто-то может попытаться найти ответ на этот вопрос. Спасибо за внимание, хотя. – Mark

+0

Если вы обнаружите ответ, добавьте ответ в блок ответа. Пожалуйста, не изменяйте заголовок с помощью [resolved] и, пожалуйста, не добавляйте ответ на вопрос - мы предпочитаем, чтобы вопросы и ответы были четко очерчены здесь, не в последнюю очередь для улучшения данных, предоставленных в SE API. Вы бы отредактировали? Благодаря! – halfer

ответ

1

Это то, что я сделал. Я изменил положение экземпляра внутреннего класса (изнутри внешнего конструктора по умолчанию в переменную экземпляра). Как это:

От

public class Outer extends PircBot { 
private int x; 
public Outer(){ 
x = 5; 
Inner n = new Inner(); //Instantiation inside Outer class's default constructor 
} 
public class Inner extends SessionAdapter { 
...  
} 
} 

Для

public class Outer extends PircBot { 
private int x; 
Inner n = new Inner(); //Now instantiation is outside constructor 
public Outer(){ 
x = 5; 
//no more instantiation inside constructor 
} 
public class Inner extends SessionAdapter { 
...  
} 
} 

Кроме того, это может быть подергивание вещь. Иногда капитализация имен каналов не работает. Это требует капитализации букв определенным образом. Поэтому я изменил капитализацию букв в String (странно, но что угодно).