gpt4 book ai didi

java - 从 OS X Applet 调用 java.awt.Toolkit.getDefaultToolkit() 时出现空指针异常

转载 作者:行者123 更新时间:2023-12-01 13:10:25 24 4
gpt4 key购买 nike

当我尝试在 OS X 10.7.5 上查看 Java 小程序时,收到以下 NPE:

[2014-04-07T11:39:22.035] [thread applet-com.OTHERCOMPANY.wave.applets.PRODUCT.PRODUCT.class-2] com.COMPANY.nm.logging.LogMaster.auditLoggingMessage AUDIT: HEMXL0001A=Audit logging is enabled.
Exception in thread "AWT-EventQueue-2" java.lang.NullPointerException
at com.COMPANY.XYZ.applets.PRODUCT.ui.table.TableMouseListener.<init>(TableMouseListener.java:71)
at com.COMPANY.XYZ.applets.PRODUCT.PRODUCTTable.<init>(PRODUCTTable.java:315)

我没有源代码,但假设使用 javap 找到了 TableMouseListener.java:71:

  public com.COMPANY.XYZ.applets.PRODUCT.ui.table.TableMouseListener(com.COMPANY.XYZ.applets.PRODUCT.PRODUCTContext, javax.swing.JTable);
flags: ACC_PUBLIC
Code:
stack=5, locals=4, args_size=3
0: aload_0
1: invokespecial #1 // Method com/OTHERCOMPANY/wave/uicomponents/PopupListener."<init>":()V
4: aload_0
5: aconst_null
6: putfield #2 // Field firstClickEvent:Ljava/awt/event/MouseEvent;
9: aload_0
10: aload_1
11: putfield #3 // Field context:Lcom/COMPANY/XYZ/applets/PRODUCT/PRODUCTContext;
14: aload_0
15: aload_2
16: putfield #4 // Field table:Ljavax/swing/JTable;
THIS --->
19: invokestatic #5 // Method java/awt/Toolkit.getDefaultToolkit:()Ljava/awt/Toolkit;
22: ldc #6 // String awt.multiClickInterval
24: invokevirtual #7 // Method java/awt/Toolkit.getDesktopProperty:(Ljava/lang/String;)Ljava/lang/Object;
27: checkcast #8 // class java/lang/Integer
30: invokevirtual #9 // Method java/lang/Integer.intValue:()I
33: istore_3
34: aload_0
THIS --->
35: new #10 // class javax/swing/Timer
38: dup
39: iload_3
40: aload_0
41: invokespecial #11 // Method javax/swing/Timer."<init>":(ILjava/awt/event/ActionListener;)V
44: putfield #12 // Field clickTimer:Ljavax/swing/Timer;
47: return
LineNumberTable:
line 65: 0
line 62: 4
line 66: 9
line 67: 14
line 71: 19
line 72: 34
line 73: 47

有什么好主意可能会导致此问题以及解决方法吗?我不太清楚这个工具包的作用,但它似乎提供了一个图形系统的接口(interface),该接口(interface)可能受到小程序沙箱的限制?

我调查过的一些东西:

  • 对于未调用 getDefaultToolkit() 的旧版本小程序,不会发生这种情况
  • 这似乎只发生在 OS X 上,Windows 和 Linux 都可以
  • 我尝试过中等小程序安全设置、删除 Java 缓存和其他一些巫术,但没有效果
  • 通常在小程序之外调用此方法效果很好,请参见下文。
$ cat gettk.java 
import java.awt.*;

public class gettk {
public static void main(String args[]) throws Exception {
System.out.println("tk = " + Toolkit.getDefaultToolkit());
}
}
$ java gettk
tk = sun.lwawt.macosx.LWCToolkit@32d16dc8

更新一:根据评论的建议,这是一个更好的反编译。第 71 行是:

 int multiClickInterval = ((Integer)Toolkit.getDefaultToolkit().getDesktopProperty("awt.multiClickInterval")).intValue();

事实证明,问题很可能是 awt.multiClickInterval 的使用。我会检查是否可以将其从 <embed> 中插入属性。

更新二:

是的,失踪的awt.multiClickInterval问题是:

rc@ds9000:~ $ cat gettk.java 
import java.awt.*;

public class gettk {
public static void main(String args[]) throws Exception {
System.out.println("tk = " + Toolkit.getDefaultToolkit());
int multiClickInterval = ((Integer)Toolkit.getDefaultToolkit().getDesktopProperty("awt.multiClickInterval")).intValue();
System.out.println(multiClickInterval);
}
}
rc@ds9000:~ $ java gettk
tk = sun.lwawt.macosx.LWCToolkit@15e6e48b
Exception in thread "main" java.lang.NullPointerException
at gettk.main(gettk.java:6)

不幸的是,我似乎无法将其作为系统属性传递:

rc@ds9000:~ $ java -Dawt.multiClickInterval=200 gettk 
tk = sun.lwawt.macosx.LWCToolkit@15e6e48b
Exception in thread "main" java.lang.NullPointerException
at gettk.main(gettk.java:6)

奇怪的是,OS X 10.5 here 中有一条关于如何修复此问题的注释。 (苹果公司?),还有 multiple instances of WONTFIX for Java 7 and 8 in the upstream JDK Jira here .

最佳答案

啊哈。我为你找到了解决方法。但它需要一些技巧。

public class HackApplet extends WhateverRandomAppletClassItWas {
public void init(){
Toolkit.getDefaultToolkit().setDesktopProperty("awt.multiClickInterval", 200);
super.init();
}
}

然后删除实际小程序的签名(如果有),添加自定义小程序,手动签名(否则我确定 setDesktopProperty 不起作用),它应该工作。

关于java - 从 OS X Applet 调用 java.awt.Toolkit.getDefaultToolkit() 时出现空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22912432/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com