gpt4 book ai didi

java - .jar 文件不会运行(InvocationTargetException)

转载 作者:行者123 更新时间:2023-11-30 07:52:19 27 4
gpt4 key购买 nike

我正在尝试为 Android 设备上的 UI 性能测试设置 FPSMeter 应用程序。 They say我需要安装应用程序的移动和桌面部分。移动部分没有问题,但桌面部分的 .jar 文件无法启动。我试过通过命令行启动它,这就是它返回的内容:

java -jar FPSMeterApp.jar
os windows
Exception in Application start method
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(Lau
ncherImpl.java:389)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImp
l.java:323)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at sun.launcher.LauncherHelper$FXHelper.main(Unknown Source)
Caused by: java.lang.RuntimeException: Exception in Application start method
at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherIm
pl.java:917)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$155(
LauncherImpl.java:182)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NullPointerException
at application.Unpack.extract(Unknown Source)
at application.Unpack.getFile(Unknown Source)
at application.Unpack.file(Unknown Source)
at application.ADB.<init>(Unknown Source)
at application.Main.start(Unknown Source)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$162
(LauncherImpl.java:863)
at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(Platfor
mImpl.java:326)
at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.
java:295)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformI
mpl.java:294)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatch
er.java:95)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.ja
va:191)
... 1 more
Exception running application application.Main

我安装了 x86 和 x64 最新版本的 Java RTE,我也尝试单独安装它们 - 没有任何帮助。

我在管理员角色下使用 Windows 7 (x64)

环境变量设置正确。

我应该怎么做才能真正启动它?

最佳答案

好吧,这是一种奇怪的解决方案(当然是粗糙的 hack),但可以帮助您解决问题。

首先,从这里的堆栈跟踪:

Caused by: java.lang.NullPointerException
at application.Unpack.extract(Unknown Source)
at application.Unpack.getFile(Unknown Source)
at application.Unpack.file(Unknown Source)
at application.ADB.<init>(Unknown Source)

...看起来在某种 adb 包装器的初始化期间发生了 NPE(更准确地说,在提取捆绑在 jar 文件中的 adb 期间) .

这几乎是您可以从堆栈跟踪中推断出的所有内容,所以我下载了 jar,尝试运行它并得到了完全相同的错误(在 Windows 8.1、jre7(32 位)、jre8(32 和 64 位)上可重现)。

我很好奇,决定用 debugger\decompiler 来研究一下。

虽然很难确定 application.ADB 行为不当的确切原因(由于编译方式的具体情况),但我有一个快速而肮脏的技巧可以用来避免问题。即,原始的application.ADB 可以替换为虚拟 stub ,您可以手动进行adb 解包。

这是如何做到的。

  1. 解压 adb.exeAdbWinApi.dllAdbWinUsbApi.dll 位于 windows 文件夹内 FPSMeterApp.jar
  2. 将它们放在与 FPSMeterApp.jar 相同的目录中>
  3. 编译以下 stub 类(javac ADB.java):
package application;public class ADB{  private String ADB_LOCATION = "adb.exe";  ADB() {  }  public String getPath() {    return this.ADB_LOCATION;  }}
  1. FPSMeterApp.jar 中的 application/ADB.class 替换为您刚刚编译的 ADB.class stub
  2. 您现在可以运行 java -jar FPSMeterApp.jar

这些步骤对我有用,我已经能够毫无异常(exception)地运行 jar 并在 UI 中查看连接的 android 设备。

关于java - .jar 文件不会运行(InvocationTargetException),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46058119/

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