2012-01-19 3 views
0

Я пытаюсь запустить слегка измененную версию this Qt Jambi Hello World example, но я столкнулся с NullPointerException, транслируемым до моей самой первой строки кода. Единственный способ, которым это было бы возможно, казалось бы, если QApplication имеет значение NULL, но он находится на моем пути сборки, и мой код компилируется.NullPointerException from java.lang.J9VMInternals

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

Это для Java 1.6 на Windows 7

приписка: woudn't вы знаете, это работает отлично с помощью 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(); 
    } 
} 

СТЕК TRACE:

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) 

Затмения 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> 
+0

Можете ли вы попытаться запустить это в командной строке? – Viruzzo

+0

Я думаю, что добавление конфигурации запуска в Eclipse имеет тот же самый существенный эффект, что и запуск из командной строки –

+0

Можете ли вы понять, какую версию Qt Jambi вы используете? Я думаю, 4.6.3 msvc2005 для Windows 32 бит. Вы загрузили этот источник? –

ответ

2

Это может быть, что на самом деле argsnull, потому что вы не установили его правильно в запустить Конфигурации в Eclipse

+0

Хорошая идея, но, к сожалению, такой же результат; Я установил «arg0» в качестве аргумента командной строки в config запуска, а затем изменил код, чтобы сначала распечатать его на консоль; это сработало, но затем появилась ошибка, указывающая на следующую строку: «QApplication.initialize (args);» –

+0

@GeorgeJempty вы уверены, что можете написать параметр jsut 1? не требует ли QApplication 2 параметра? Проверьте эту ссылку: [QApplication Constructor] (http://developer.qt.nokia.com/doc/qt-4.8/qapplication.html#QApplication) –

+0

Я не думаю, что это относится к Java API, все примеры, которые я видел, включая другие вопросы прямо здесь, на SO и qt-jambi javadoc по адресу http://doc.trolltech.com/qtjambi-4.5.0_01/index.html?com/trolltech/qt/gui/QApplication. html, похоже, QApplication.initialize - это просто механизм для передачи аргументов командной строки через –

Смежные вопросы