Java: есть ли способ запустить метод класса, который инициализировал экземпляр класса, из которого я хочу его запустить? - PullRequest
0 голосов
/ 19 мая 2019

Я использую JMS (Java Messaging System) для тестирования стандартного приложения между клиентом и сервером.

Приложение разделено по слоям, в клиентском модуле у меня есть 3 разных файла, есть Main, который похож на само приложение, файл контроллера, который имеет ListView со списком сообщений и, наконец, третий файл, который в основном отвечает за отправку и получение входящих сообщений.

Поскольку он разделен на слои, когда я запускаю приложение, Контроллер запускает экземпляр класса Messaging, чтобы он мог отправлять сообщения, которые написаны в интерфейсе, и, конечно, сохранять их в ListView, который у меня есть. со всей историей сообщений.

Вопрос заключается в следующем: когда я отправляю сообщение, оно передает его от контроллера к классу сообщений, чтобы оно могло быть отправлено на сервер, но когда я делаю обратный процесс, сообщение получает новый сообщение, я не могу найти способ передать его обратно контроллеру, так как именно контроллер инициировал экземпляр обмена сообщениями, а не наоборот.

КОНТРОЛЛЕР СМОТРИТ НА ЭТОМ СПОСОБЕ:

public class LoanClientController implements Initializable{

public ApplicationGateway applicationGateway = new ApplicationGateway(){};

public TextField tfSsn;
public TextField tfAmount;
public TextField tfTime;

public ListView<ListViewLine> lvLoanRequestReply;

@Override
public void initialize(URL location, ResourceBundle resources) {
    tfSsn.setText("123456");
    tfAmount.setText("80000");
    tfTime.setText("30");
}

@FXML
public void btnSendLoanRequestClicked() throws Exception {

    int ssn = Integer.parseInt(tfSsn.getText());
    int amount = Integer.parseInt(tfAmount.getText());
    int time = Integer.parseInt(tfTime.getText());
    LoanRequest loanRequest = new LoanRequest(ssn,amount,time);
    ListViewLine listViewLine = applicationGateway.sendMessage(loanRequest);

    lvLoanRequestReply.getItems().add(listViewLine);
    applicationGateway.setLvLoanRequestReply(lvLoanRequestReply);
    lvLoanRequestReply.refresh();

}
}

НА ДРУГОЙ СТОРОНЕ, ШКАФ ПРИЛОЖЕНИЯ a.k.a. "СООБЩЕНИЕ КЛАСС" является следующим:

public class ApplicationGateway implements MessageListener {

public MessagingGateway messagingGateway = new MessagingGateway("Client-Broker", "Broker-Client");

public ApplicationGateway(){

    try {
        messagingGateway.getConsumer().setMessageListener(this);
    } catch (JMSException e) {
        e.printStackTrace();
    }

}

@Override
public void onMessage(Message message) {

   try {

                Gson gson = new Gson();
                LoanReply loanReply = gson.fromJson(((TextMessage) message).getText(), LoanReply.class);


    } catch (JMSException e) {
        e.printStackTrace();
    }

}
}

По сути, я пытаюсь сделать следующее: когда новое сообщение приходит с помощью метода onMessage, отправьте значение в контроллер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...