Codename One action event

В проекте Codename One, скажем, в проекте «PRJ1», который я создал в NetBeans, я определил файл, который у меня не должен быть, как событие действия.

В частности, в интерфейсе дизайнера для редактирования «theme.res» (я использую последнюю версию NetBeans и Codename One) я щелкнул правой кнопкой мыши кнопку, затем в раскрывающемся меню «События» -> «Событие действия» ввел .jar файл.

С тех пор я получаю сообщение об ошибке:

Error opening Netbeans.java.IOException: Cannot run program "..\MyApp.jar" CreateProcess error=193, %1 is not a valid Win32 application 

всякий раз, когда я приближаюсь к событиям.

Я удалил PRJ1 и создал PRJ2 с нуля. Когда я снова попытался определить событие действия таким же образом, я получил ту же ошибку во всплывающем окне сразу после того, как я щелкнул событие действия или любое другое событие. у меня то же самое, когда я определяю новый компонент в новом проекте. «MyApp.jar», похоже, навсегда застрял на моем кодовом имени One. Я не могу от этого избавиться.

Мои вопросы:

Как я могу определить действие исключительно в исходном коде без использования интерфейса дизайнера?

Когда я определяю событие действия так, как я это делал, используя интерфейс дизайнера, как это попадает в код? Я вижу методы, добавленные в StateMachine.java. Из того, что я вижу, это все, что касается исходного кода. Что-нибудь еще меняется где-нибудь в .xml или других файлах confign? Я вручную поискал файлы в каталоге проекта. Никаких следов MyApp.jar нигде.

Заранее спасибо.

Я новичок в Codename One. Это может быть простой вопрос, но он потратил так много моего времени.


person Roam    schedule 01.03.2014    source источник


Ответы (3)


Вам необходимо запустить конструктор, щелкнуть File-> Setup NetBeans и выбрать файл netbeans.exe / .app.sh из каталога bin NetBeans, чтобы дизайнер мог запускать NetBeans.

Вы можете создать вручную написанное приложение в мастере (второй вариант внизу), где дизайнер используется только для темы, а не для графического интерфейса. Вы можете обрабатывать события так же, как в Swing / AWT addActionListner и т. Д., На любом компоненте.

person Shai Almog    schedule 02.03.2014
comment
Когда я создаю проект в первый раз и запускаю его, я получаю сообщение об ошибке выполнения: Exception in thread AWT-EventQueue-0 java.lang.NullPointerException .... трассировка стека большая. это должно произойти? я ничего не менял ни в коде, ни в дизайнере. в симуляторе все работает нормально. - person Roam; 03.03.2014
comment
Можете ли вы опубликовать полный стек как отдельный вопрос или на форуме обсуждения codenameone.com/discussion-forum .html Я бы хотел это увидеть. - person Shai Almog; 03.03.2014
comment
Я разместил его на странице stackoverflow.com/questions/22161346 / - person Roam; 04.03.2014

У меня такая же проблема. Я предполагаю, что это происходит, когда вы меняете каталог по умолчанию для своей установки (что-то, что я делаю все время)

Сначала вам следует сбросить настройки. В редакторе графического интерфейса перейдите к «codename one» -> расширенный -> сбросить настройки netbean.

В следующий раз, когда вы получите диалоговое окно с файлом, найдите и выберите netbeans.exe (или netbeans64.exe).

Чтобы ответить на ваш конкретный вопрос о том, как избежать использования редактора графического интерфейса, вы можете вручную добавить код обработчика событий в файл StateMachine.java. Вот так:

  @Override
    protected void onMain_Button1Action(Component c, ActionEvent event) {
        //do stuff        
    }

Просто используйте правильное имя вашей кнопки или компонента вместо Button1.

person john ktejik    schedule 25.03.2014

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

Если кнопка была определена в построителе графического интерфейса:

Button btn = findMyButton(form);
btn.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent evt) {
            // do something
        }
});

Чтобы также определить кнопку в коде:

Button btn = new Button('my button');
btn.addActionListener(new ActionListener() {
    ...as above
});
person ygesher    schedule 18.01.2016