Java 获取在Windows 7中笔记本电脑是否正在[在ACLine]充电或[不在ACLine]充电?

Java 获取在Windows 7中笔记本电脑是否正在[在ACLine]充电或[不在ACLine]充电?,java,java-native-interface,core,jna,kernel32,Java,Java Native Interface,Core,Jna,Kernel32,我正在使用Netbeans IDE 7.4。 我尝试使用下面的代码,但在尝试执行时出错。编译没问题 在开始之前,我已经在我的项目中下载并添加了[右键单击库>>添加JAR/文件夹…] 代码如下: package battery; import java.util.ArrayList; import java.util.List; import com.sun.jna.Native; import com.sun.jna.Structure; import com.sun.jna.win3

我正在使用Netbeans IDE 7.4。 我尝试使用下面的代码,但在尝试执行时出错。编译没问题

在开始之前,我已经在我的项目中下载并添加了[右键单击库>>添加JAR/文件夹…]

代码如下:

    package battery;

import java.util.ArrayList;
import java.util.List;
import com.sun.jna.Native;
import com.sun.jna.Structure;
import com.sun.jna.win32.StdCallLibrary;

public class Battery implements Kernel32{
    public static void main(String[] args){
        try{
            Kernel32.SYSTEM_POWER_STATUS batteryStatus = new Kernel32.SYSTEM_POWER_STATUS();
            Kernel32.INSTANCE.GetSystemPowerStatus(batteryStatus);

            System.out.println(batteryStatus); // Shows result of toString() method.
        }
        catch(Exception ex){System.out.println("Error:\n" + ex);}
    }

    @Override
    public int GetSystemPowerStatus(SYSTEM_POWER_STATUS result){
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }
}

interface Kernel32 extends StdCallLibrary{
    public Kernel32 INSTANCE = (Kernel32) Native.loadLibrary("Kernel32", Kernel32.class);

    /**
     * @see http://msdn2.microsoft.com/en-us/library/aa373232.aspx
     */
    public class SYSTEM_POWER_STATUS extends Structure{
        public byte ACLineStatus;
        public byte BatteryFlag;
        public byte BatteryLifePercent;
        public byte Reserved1;
        public int BatteryLifeTime;
        public int BatteryFullLifeTime;

        @Override
        protected List<String> getFieldOrder(){
            ArrayList<String> fields = new ArrayList<String>();
            fields.add("ACLineStatus");
            fields.add("BatteryFlag");
            fields.add("BatteryFullLifeTime");
            fields.add("BatteryLifePercent");
            fields.add("BatteryLifeTime");
            fields.add("Reserved1");
            return fields;
        }

        /**
         * The AC power status
         */
        public String getACLineStatusString(){
            switch (ACLineStatus){
                case (0): return "Offline";
                case (1): return "Online";
                default: return "Unknown";
            }
        }

        /**
         * The battery charge status
         */
        public String getBatteryFlagString(){
            switch (BatteryFlag){
                case (1): return "High, more than 66 percent";
                case (2): return "Low, less than 33 percent";
                case (4): return "Critical, less than five percent";
                case (8): return "Charging";
                case ((byte) 128): return "No system battery";
                default: return "Unknown";
            }
        }

        /**
         * The percentage of full battery charge remaining
         */
        public String getBatteryLifePercent(){
            return (BatteryLifePercent == (byte) 255) ? "Unknown" : BatteryLifePercent + "%";
        }

        /**
         * The number of seconds of battery life remaining
         */
        public String getBatteryLifeTime(){
            return (BatteryLifeTime == -1) ? "Unknown" : BatteryLifeTime + " seconds";
        }

        /**
         * The number of seconds of battery life when at full charge
         */
        public String getBatteryFullLifeTime(){
            return (BatteryFullLifeTime == -1) ? "Unknown" : BatteryFullLifeTime + " seconds";
        }

        @Override
        public String toString(){
            StringBuilder sb = new StringBuilder();
            sb.append("ACLineStatus: " + getACLineStatusString() + "\n");
            sb.append("Battery Flag: " + getBatteryFlagString() + "\n");
            sb.append("Battery Life: " + getBatteryLifePercent() + "\n");
            sb.append("Battery Left: " + getBatteryLifeTime() + "\n");
            sb.append("Battery Full: " + getBatteryFullLifeTime() + "\n");
            return sb.toString();
        }
    }

    /**
     * Fill the structure.
     */
    public int GetSystemPowerStatus(SYSTEM_POWER_STATUS result);
}

您的Kernel32接口具有默认访问权限,这意味着只有相同包的成员才能访问它。将它放在自己的类中并公开,或者将它嵌套在电池类中。您好,谢谢您的评论。但是我试着按照你告诉我的方式去做,但还是不起作用。你能告诉我代码是如何实现的吗???根据你所做的更改更新你的问题
java.lang.IllegalArgumentException: Could not access instance of interface battery.Kernel32 (java.lang.IllegalAccessException: Class com.sun.jna.Native can not access a member of class battery.Kernel32 with modifiers "public static final")