java - 错误: static class forcing UnsupportedOperationException

标签 java exception netbeans jna

我有一个类,其中包含一个静态方法,用于使用 JNA (Java NATive Access) 的 CreateProcess api 执行外部程序。

PS:我正在根据此代码进行制作,发现 here在SO中。

我的问题是,当将 ProcessInformation 类和 StartupInfoA 作为静态类在上述方法中使用时,这会强制使用 @Override类型:

        @Override
        protected List getFieldOrder() {
            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
        }

我从来没有成功执行我的项目:-(。参见:

enter image description here

所以,我问你: - 有一些解决方案吗?

以下是我如何制定实现目标的所有过程:

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);
    }

}

最佳答案

getFieldOrder 方法的用途是提供字段在表示 Structure 的类中出现的名称和顺序。您需要执行以下操作:

流程信息

按如下方式替换 getFieldOrder 方法:

  @Override
  protected List getFieldOrder() {
      return Arrays.asList(new String[] { "hProcess", "hThread", "dwProcessId", "dwThreadId" });
  }

StartupInfoA 类似,返回一个列表,其中包含 StartupInfoA 中字段的名称(按字段出现的顺序排列)。

关于java - 错误: static class forcing UnsupportedOperationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38543109/

相关文章:

java - 使用JDBC和MySQL解决“通信链接失败”问题

iphone - ios @try @catch 从 @catch 返回时阻止 EXC_BAD_ACCESS

java - 接口(interface)实现启动不同的异常

java - 如何获取 .wav 或 .mid 文件在 netbeans 之外播放?

java - 在 Restful 客户端中检索枚举的 PostgreSQL 类型

java - LinkedHashMap 内存消耗

java - 使用 Java 从无效的 SOAP 1.1 消息中获取值(value)

java - 为什么? "Always declare user defined exceptions as final"

java - 如何将从github下载的库导入到netbeans中?

java - Java 一次循环中的多个方法