Problemas para atualização do nível de Bateria do Notebook

public interface InterfaceEnergia extends StdCallLibrary{   
    
    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;
        
        public int getBatteryLifePercent(){
            int percent = 0;
            if(BatteryLifePercent != (byte)255){
                percent = BatteryLifePercent;               
            }
            return percent;            
        }
        
        public String getACLineStatus(){
            String r = null;
            switch(ACLineStatus){
                case 0:
                    return "Off";                    
                case 1:
                    return "On";                   
                default:                    
                    break;
            }
            return r;
        }
    }
    
    public int GetSystemPowerStatus(SYSTEM_POWER_STATUS result);    
}
public class Energia implements Observer{
    
    JLabel labelPercentagem;    
    JLabel labelBateria;    
    JProgressBar barraProgress;
    
    public Energia(JLabel labelPercentagem, JProgressBar barraProgress, JLabel labelBateria){
        this.labelPercentagem = labelPercentagem; 
        this.barraProgress = barraProgress;
        this.labelBateria = labelBateria;       
    }  
    
    private void progressbar(String str, boolean op, Color cor){
        barraProgress.setString(str);
        barraProgress.setStringPainted(op);
        barraProgress.setForeground(cor); 
    }
    
    private void configEnergiaNotebook(EnergiaRunnable e){        
        barraProgress.setOrientation(barraProgress.VERTICAL);
        barraProgress.setMinimum(0);
        barraProgress.setMaximum(100);        
        if(e.getPercentagem() <= 100 && e.getPercentagem() >= 65){  
            progressbar("", true, Color.GREEN);          
            labelPercentagem.setForeground(Color.GREEN);
        }       
        if(e.getPercentagem() <= 64 && e.getPercentagem() >= 36){            
            progressbar("", true, Color.ORANGE);   
            labelPercentagem.setForeground(Color.ORANGE);
        }       
        if(e.getPercentagem() <= 35 && e.getPercentagem() >= 0){            
            progressbar("", true, Color.RED);
            labelPercentagem.setForeground(Color.RED);
        } 
        if(e.getBateria().equals("Off")){            
            labelBateria.setForeground(Color.RED);
            labelBateria.setText(" Desligado");
        }else{
            labelBateria.setForeground(Color.BLUE);
            labelBateria.setText("    Ligado");            
        }
        barraProgress.setValue(e.getPercentagem());
        labelPercentagem.setText(String.valueOf(e.getPercentagem()).concat("%"));       
    }  
    
    @Override
    public void update(Observable o, Object arg){
        EnergiaRunnable e = (EnergiaRunnable)o;
        configEnergiaNotebook(e);        
    }   
}
public class EnergiaRunnable extends Observable implements Runnable{    
    
    private int percentagem = 0;     
    private String bateria = "";
    public static boolean fim = false;
    private InterfaceEnergia energia = (InterfaceEnergia)Native.loadLibrary("kernel32.dll", InterfaceEnergia.class);
    InterfaceEnergia.SYSTEM_POWER_STATUS sps = new InterfaceEnergia.SYSTEM_POWER_STATUS();    
    
    public EnergiaRunnable(Observer ob){
        this.addObserver(ob);        
        energia.GetSystemPowerStatus(sps);
    }
    
    public int getPercentagem(){        
        return percentagem;
    }
    
    public String getBateria(){
        return bateria;
    }
    
    @Override
    public void notifyObservers(){
        super.setChanged();
        super.notifyObservers();
    }
    
    @Override
    public void run(){
        while(!fim){
            percentagem = sps.getBatteryLifePercent();
            bateria = sps.getACLineStatus();
            this.notifyObservers();
        }        
    }
}
public class MyFrame extends javax.swing.JFrame{
    
    private EnergiaRunnable energia;  
    
    public MyFrame(){
        initComponents();
        setResizable(false);
        setLocationRelativeTo(null); 
        startEnergia();
    }    
    
    private void startEnergia(){        
        energia = new EnergiaRunnable(new Energia(this.jLabel1, this.jProgressBar1, this.jLabel4));
        new Thread(energia).start();
    }
    
    @SuppressWarnings("unchecked")

    //Generated Code

    public static void main(String args[]){
        /* Set the Nimbus look and feel */
       
        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                new MyFrame().setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify  
}