2017-09-05 15 views
2

AndroidデバイスでUIパフォーマンステスト用のFPSMeterアプリを設定しようとしています。 They sayアプリのモバイル部分とデスクトップ部分の両方をインストールする必要があります。モバイル部分に問題はありませんが、デスクトップ部分の.jarファイルは起動しません。 私は、コマンドラインを介して、それを起動しようとした、そしてそれは、それは返すものです:.jarファイルが実行されない(InvocationTargetException)

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 

私は、Java RTEの両方のx86とx64の最新バージョンがインストールされている、私はまた、それらを個別にインストールしようとした - 何も助けません。

は私が

環境変数が正しく設定された管理者の役割の下でのWindows 7(x64の)を使用します。

実際に起動するにはどうすればよいですか?

+0

Javaプログラムとは何ですか? – HyperNeutrino

+0

どういう意味ですか? – obi4niy

+0

同様に、実行しようとしているプログラムは何ですか? – HyperNeutrino

答えて

3

これは奇妙な解決策です(確かに粗いハックですが)。問題を解決するのに役立ちます。

ここにあなたのスタックトレースからまず第一に、:

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の抽出の際に、より正確に(adbラッパーのいくつかの種類の初期化中に起こっNPEがあるように見えますjarファイル内)。

これはスタックトレースから推測することができますので、jarをダウンロードして実行しようとしましたが、Windows 8.1、jre7(32ビット)、jre8(32および64ビット)で再現可能です。

私は不思議に思って、debugger \ decompilerでそれを突き止めることに決めました。

application.ADB(正確にはコンパイルされているため)正確な理由を特定するのは難しいですが、問題を回避するために使用できる高速で汚れたトリックのアイデアがあります。つまり、元のapplication.ADBはダミースタブに置き換えることができ、adbを手動で展開することができます。

ここでその方法を説明します。 AdbWinUsbApi.dllFPSMeterApp.jar

  • windowsフォルダ内に

    1. 解凍ファイルadb.exeAdbWinApi.dllは、FPSMeterApp.jar
    2. と同じディレクトリに入れ、次のスタブクラス(javac ADB.java)コンパイル:
     
    package application; 
    
    public class ADB 
    { 
        private String ADB_LOCATION = "adb.exe"; 
    
        ADB() { 
        } 
    
        public String getPath() { 
        return this.ADB_LOCATION; 
        } 
    } 
    
    1. の代わりにapplication/ADB.classFPSMeterApp.jarの内側にあなただけの
    2. をcompilled ADB.classスタブとあなたが今java -jar FPSMeterApp.jar

    を実行することができ、これらの手順は、私のために働いたと私は例外なしでjarファイルを実行し、UIに接続されているAndroidデバイスを参照することができました。

  • 関連する問題