вызов нового метода в java из mxml приводит к ошибке «не удается вызвать метод»

#java #apache-flex

#java #apache-flex

Вопрос:

UserService.java

 ...
        public class UserService {
                public static User getUser(String username, String password) {
                        ...
                }   

                public static User getUser2(String username, String password) {
                        ...
                }   
        }  
  

login.mxml

     private function loginUser() : void {
            lostPassword = false;

            // this works fine
        UserService.getUser(username.text, password.text);

            // this fails !
        UserService.getUser2(username.text, password.text);

        }
  

getUser уже было в, UserService.java. я только что создал getUser2 , и оно идентично getUser . Когда я пытаюсь вызвать getUser2 , я получаю ошибку « Cannot invoke method «.

вопрос: Нужно ли указывать getUser2 в каком-либо другом файле? как в каком-то файле конфигурации? если да, то какой и как мне это сделать.

Спасибо.

Комментарии:

1. 1. Используете ли вы аннотации JAVA-WS? 2. Вы компилируете JAVA-код? 3. Генерируете ли вы сервисный код с помощью wsgen? 4. Используете ли вы службы данных Flash Builder для самоанализа сервиса и генерации клиентского кода? 5. Если (4== true) Вы обновили службу? 6. Используете ли вы BlazeDS remoting?

2. Является ли временная метка в версии UserService.class , которая загружается, более старой, чем в UserService.java ?

3. @Kevin, извините за глупый вопрос, но как мне скомпилировать Java-код в eclipse? должен ли я загружать компилятор Java для этого. @mike, я вижу UserService.java файл, но я не вижу отдельного файла для UserService.class.

Ответ №1:

думаю, проблема в статическом методе JAVA в соответствии с определением службы удаленной связи

Служба удаленного взаимодействия позволяет клиентскому приложению получать доступ к методам серверных объектов Java

В Java / oops статические методы не связаны с объектом / экземпляром, который зависит от него / ассоциирован с классом

ваш метод должен быть таким, чтобы принимать вызов из flex

 public class UserService {
                public User getUser(String username, String password) {
                        ...
                }   

                public User getUser2(String username, String password) {
                        ...
                }   
        }  
  

Надеется, что это поможет

Комментарии:

1. Я использую Flex для редактирования как msml, так и java, а также опцию сборки Export Release для сборки swf-файла. Затем я копирую swf-файл на наш тестовый сервер для тестирования. Перед getUser есть статическое объявление, и оно отлично работало, но не для getUser2. В целях тестирования я удалил все статические объявления (как для getUser2, так и для getUser), и проблема все еще сохраняется. Не может быть так сложно работать в flex! Заранее спасибо за всю помощь..

2. исправление: я использую eclipse для редактирования msml и java, затем опцию eclipse Export Release Build для сборки swf-файла.

3. вопрос: нужно ли мне компилировать Java-код (например UserService.java ) отдельно? если да, то какой инструмент мне следует использовать? Спасибо.

4. Используете ли вы Flex builder?, он предоставляет тип проекта, в котором Flex amp; компилируется и развертывается вместе в WAR of BlazeDS

5. Я, наконец, понял это. Было 3 вещи, которые я сделал неправильно: 1) Мне нужно было скопировать скомпилированный класс java (UserService.class ) на сервер развертывания, а не только в файл Index.swf. 2) У проекта неверный корень содержимого и пути 3) Веб-сайту требуется перезапуск после каждого развертывания (быстрый и грязный способ — просто внести меньшее изменение в web.xml ) Изучение Java было на самом деле несложным. Большую часть времени занимала настройка Flex и изучение нюансов развертывания. Спасибо вам всем за помощь, особенно Имрану. Махало 🙂