私は、外部プログラムを実行する静的メソッドを含むクラスがあります。これは、JNA(Java NAtive Access)のCreateProcess
APIを使用しています。エラー:静的クラス強制UnsupportedOperationException
PS:私はこのコードに基づいて作成しています。hereはSOです。
@Override
protected List getFieldOrder() {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
そして、私のプロジェクトを実行するために、私は成功を持っていることはありません:
私の悩みはProcessInformation
クラスと上記の方法で使用するこのためStartupInfoA
として静的クラスを入れたときに、このタイプの@Override
強制することです - 。(参照:
だから、私はあなたに尋ねる: - それのためにいくつかの解決策は存在し
?ここは私が私の目標を得るためのすべてのプロセスを作ってるんだかです:
package myProgram;
import com.sun.jna.Native;
import com.sun.jna.Pointer;
import com.sun.jna.Structure;
import com.sun.jna.WString;
import static com.sun.jna.platform.win32.WinBase.STARTF_USESHOWWINDOW;
import static com.sun.jna.platform.win32.WinUser.SW_SHOWNORMAL;
import com.sun.jna.win32.StdCallLibrary;
import java.util.List;
public class Execute {
public interface Kernel32 extends StdCallLibrary {
Kernel32 INSTANCE = (Kernel32) Native.loadLibrary("kernel32", Kernel32.class);
boolean CreateProcessA(
String lpApplicationName
, String lpCommandLine
, Structure lpProcessAttributes
, Structure lpThreadAttributes
, boolean bInheritHandles
, int dwCreationFlags
, Structure lpEnvironment
, String lpCurrentDirectory
, Structure lpStartupInfo
, Structure lpProcessInformation);
}
public static class ProcessInformation extends Structure {
public Pointer hProcess;
public Pointer hThread;
public int dwProcessId;
public int dwThreadId;
@Override
protected List getFieldOrder() {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
}
public static class StartupInfoA extends Structure {
public int cb;
public WString lpReserved;
public WString lpDesktop;
public WString lpTitle;
public int dwX;
public int dwY;
public int dwXSize;
public int dwYSize;
public int dwXCountChars;
public int dwYCountChars;
public int dwFillAttribute;
public int dwFlags;
public short wShowWindow;
public short cbReserved2;
public Pointer lpReserved2;
public Pointer hStdInput;
public Pointer hStdOutput;
public Pointer hStdError;
@Override
protected List getFieldOrder() {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
}
public static void ExecuteProc(String software){
ProcessInformation processInformation = new ProcessInformation();
StartupInfoA startupInfo = new StartupInfoA();
startupInfo.dwFlags = STARTF_USESHOWWINDOW;
startupInfo.wShowWindow = SW_SHOWNORMAL;
Kernel32.INSTANCE.CreateProcessA(software, null
, null
, null
, true
, 0
, null
, null
, startupInfo
, processInformation);
}
}
'ProcessInformation'で' Unrowed new UnsupportedOperationException'文を削除し、それを 'return Arrays.asList(new String [] {" hProcess "、" hThread "、" dwProcessId "、" dwThreadId "})に置き換えることはできますか?それは何か違いがあるかどうかを確認しますか? – CKing
@CKing、この提案は、他のエラー例外[参照](http://pastebin.com/zsQb93uP)を返します。 –
さて、私はあなたに 'ProcessInformation'クラスにその行を貼り付けるよう依頼しました。 'StartupInfoA'に同じ行を貼り付けるべきではありません。なぜなら、それは異なるフィールドセットを持っているからです。 'getFieldOrder'メソッドは、クラスに現れるフィールドの名前を表示された順序で返さなければなりません。だから 'StartupInfoA'では、' StartupInfoA'にあるフィールドの名前を返す必要があります!それは理にかなっていますか? – CKing