【问题标题】:NullPointerException from java.lang.J9VMInternals来自 java.lang.J9VMInternals 的 NullPointerException
【发布时间】:2012-01-19 16:24:21
【问题描述】:

我正在尝试运行this Qt Jambi Hello World example 的略微修改版本,但我遇到了可追溯到我的第一行代码的 NullPointerException。这可能的唯一方法似乎是如果 QApplication 为空,但它在我的构建路径上,并且我的代码可以编译。

一开始我想知道空指针是不是我缺少构造函数,但是添加一个仍然会导致错误。现在我想知道这是否是因为可能有一些 JNI(Java Native Access)在幕后进行以使 Qt Jambi 工作,或者尽管编译(在 Eclipse 中),IDE 仍然没有正确执行文件 main 方法。

这适用于 Windows 7 上的 Java 1.6

后记: 您不知道使用 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>

【问题讨论】:

  • 你可以尝试在命令行上运行它吗?
  • 我认为在Eclipse中添加运行配置和从命令行运行的本质效果是一样的
  • 你能清楚你使用的是哪个版本的 Qt Jambi 吗?我猜 4.6.3 msvc2005 for windows 32 位。你下载了这个 sourceforge 吗?
  • 可能与 FWIW 相关:stackoverflow.com/questions/2691894/…
  • 已添加 if(args == null) args = new String[0];无济于事。难道不是设置环境变量吗?包含 QtCore.dll 和所有其他 dll 的目录 is 在我的路径上(对我来说,现在:C:\Users\dp078008\Documents\qtjambi-4.7.1\bin)

标签: java eclipse jvm java-native-interface qt-jambi


【解决方案1】:

可能args 实际上是null,因为您没有在Eclipse 的运行配置 中正确设置

【讨论】:

  • 好主意,但不幸的是结果相同;我在运行配置中将“arg0”设置为命令行参数,然后修改代码以首先将其打印到控制台;这行得通,但随后抛出指向下一行的错误:“QApplication.initialize(args);”
  • @GeorgeJempty 你确定你可以写 jsut 1 参数吗? QApplication 不需要 2 个参数吗?检查此链接:QApplication Constructor
  • 我认为 Java API 的情况并非如此,我见过的所有示例,包括其他关于 SO 的问题和doc.trolltech.com/qtjambi-4.5.0_01/index.html?com/trolltech/qt/… 的 qt-jambi javadoc,似乎QApplication.initialize 只是一种传递命令行参数的机制
  • @GeorgeJempty 为什么不调试它并进入它。然后确定导致错误的行。会有帮助的
  • 是的,试试 if(args == null) args = new String[0]; QApplication.initialize(args);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多