NullPointerException из java.lang.J9VMInternals

Я пытаюсь запустить немного измененную версию этого примера Qt Jambi Hello World, но сталкиваюсь с NullPointerException можно проследить до моей самой первой строки кода. Казалось бы, это возможно только в том случае, если QApplication имеет значение null, но оно находится на моем пути сборки, и мой код компилируется.

Сначала я задавался вопросом, был ли нулевой указатель отсутствием конструктора, но его добавление все равно приводит к ошибке. Теперь мне интересно, связано ли это с тем, что, вероятно, за кулисами происходит какой-то JNI (Java Native Access), чтобы заставить Qt Jambi работать, или если, несмотря на компиляцию (в Eclipse), среда IDE по-прежнему не выполняет основной метод файла правильно.

Это для Java 1.6 в Windows 7

ПОСТСКРИПТ: Разве вы не знаете, что NetBeans прекрасно работает. Спасибо всем, кто ответил или прокомментировал.

КОД:

import com.trolltech.qt.gui.*;

public class EcosDesk {
    public static void main(String args[]) {
        if(args == null) args = new String[0]; //suggested addition
        QApplication.initialize(args);

        QPushButton hello = new QPushButton("Hello World!");
        hello.show();

        QApplication.exec();
    }
}

ТРАССИРОВКИ СТЕКА:

Exception in thread "main" java.lang.NullPointerException
at java.lang.J9VMInternals$1.run(J9VMInternals.java:273)
at java.security.AccessController.doPrivileged(AccessController.java:202)
at java.lang.J9VMInternals.cloneThrowable(J9VMInternals.java:248)
at java.lang.J9VMInternals.copyThrowable(J9VMInternals.java:289)
at java.lang.J9VMInternals.initialize(J9VMInternals.java:179)
at java.lang.J9VMInternals.initialize(J9VMInternals.java:167)
at java.lang.J9VMInternals.initialize(J9VMInternals.java:167)
at com.motion.ecos.EcosDesk.main(EcosDesk.java:7)

ECLIPSE classpath.xml:

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" path="src"/>
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
    <classpathentry kind="lib" path="C:/Users/dp078008/Downloads/qtjambi-4.6.3-win32/qtjambi-4.6.3/qtjambi-4.6.3.jar"/>
    <classpathentry kind="lib" path="C:/Users/dp078008/Downloads/qtjambi-4.6.3-win32/qtjambi-4.6.3/qtjambi-win32-msvc2005-4.6.3.jar"/>
    <classpathentry kind="output" path="bin"/>
</classpath>

person Dexygen    schedule 19.01.2012    source источник
comment
Можете ли вы попробовать запустить это в командной строке?   -  person Viruzzo    schedule 19.01.2012
comment
Я думаю, что добавление конфигурации запуска в Eclipse имеет тот же существенный эффект, что и запуск из командной строки.   -  person Dexygen    schedule 19.01.2012
comment
Можете ли вы уточнить, какую версию Qt Jambi вы используете? Я думаю, 4.6.3 msvc2005 для 32-разрядной версии Windows. Вы скачали этот исходник?   -  person Darryl Miles    schedule 20.01.2012
comment
Возможно, связано с FWIW: stackoverflow.com /вопросы/2691894/   -  person Darryl Miles    schedule 20.01.2012
comment
Добавили if(args == null) args = new String[0]; но безрезультатно. Может быть, это не установка переменной среды? Каталог, содержащий QtCore.dll и все остальные dll находится на моем пути (для меня на данный момент: C:\Users\dp078008\Documents\qtjambi-4.7.1\bin)   -  person Dexygen    schedule 20.01.2012
comment
Я сначала попробовал 4.6.3 для Windows 32 бит, потом перешел на версию 4.7.1   -  person Dexygen    schedule 20.01.2012
comment
Есть ли какая-то конкретная причина, по которой вы используете IBM JRE? Произойдет ли это исключение, если вы переключитесь на Oracle JRE?   -  person ᄂ ᄀ    schedule 20.01.2012
comment
Каков вывод версии IBM JRE (поэтому, возможно, я могу сделать заметку для проверки)? Вы уверены, что это 32-битная установка JRE в конфигурации запуска? (Я думаю, может быть, вы получите другую ошибку, если было несоответствие).   -  person Darryl Miles    schedule 20.01.2012
comment
Произойдет ли сбой, если вы укажете какое-то случайное значение аргумента в конфигурации запуска Eclipse? Итак, передается одно или несколько строковых значений?   -  person Darryl Miles    schedule 20.01.2012


Ответы (1)


Возможно, args на самом деле является null, потому что вы неправильно настроили его в конфигурациях запуска в Eclipse.

person Adel Boutros    schedule 19.01.2012
comment
Хорошая идея, но, к сожалению, тот же результат; Я установил arg0 в качестве аргумента командной строки в конфигурации запуска, затем изменил код, чтобы сначала вывести его на консоль; это сработало, но затем возникла ошибка, указывающая на следующую строку: QApplication.initialize(args); - person Dexygen; 19.01.2012
comment
@GeorgeJempty, вы уверены, что можете написать параметр jsut 1? не требует ли QApplication 2 параметра? Проверьте эту ссылку: Конструктор QApplication - person Adel Boutros; 19.01.2012
comment
Я не думаю, что это относится к API Java, ко всем примерам, которые я видел, включая другие вопросы прямо здесь, по SO, и javadoc qt-jambi на doc.trolltech.com/qtjambi-4.5.0_01/index.html?com/trolltech/ qt/, кажется, что QApplication.initialize — это просто механизм для передачи аргументов командной строки через - person Dexygen; 19.01.2012
comment
@GeorgeJempty Почему бы не отладить его и не вникнуть в него. Затем определите строку, вызывающую ошибку. было бы полезно - person Adel Boutros; 19.01.2012
comment
Да, попробуйте с if(args == null) args = new String[0]; QApplication.initialize(аргументы); - person Darryl Miles; 20.01.2012