Prozessorauslastung 100%

Status
Nicht offen für weitere Antworten.

crissyk

Mitglied
Hallo zusammen,

ich habe ein kleines Programm gebastelt, das über die RS232 Schnittstelle Ausgaben machen kann. Das Programm wird über eine GUI mit Buttons bedient. Das meiste klappt, Problem ist nur, dass die Prozessorauslastung mit Programmstart auf 100% geht und da bleibt, obwohl das Programm eigentlich nur etwas zu tun hat, wenn ein Button gedrückt wird. Leider komm ich nicht hinter das Problem. Kann mir einer helfen?
Die main methode:
Code:
public static void main(String[] args) {
      new SteuerungsSoftware1("SteuerungsSoftware1");
      boolean              portFound = false;
          String  defaultPort = "COM4";
          portList = CommPortIdentifier.getPortIdentifiers();

     while (portList.hasMoreElements()){
              portId = (CommPortIdentifier) portList.nextElement();

       if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL){
         if (portId.getName().equals(defaultPort)){
//            JOptionPane.showMessageDialog(null, defaultPort + " gefunden", "", JOptionPane.INFORMATION_MESSAGE);
            System.out.println(defaultPort + " gefunden");

            portFound = true;
            

                        try{
                            serialPort =(SerialPort) portId.open("SteuerungsSoftware1", 2000);
                        }catch (PortInUseException e){
                                JOptionPane.showMessageDialog(null, defaultPort + " wird von anderem Programm genutzt", "", JOptionPane.INFORMATION_MESSAGE);
                                System.out.println(defaultPort + " wird von anderem Programm genutzt");
                          continue;
                        }

                        try{
                            outputStream = serialPort.getOutputStream();
                        }catch (IOException e) {
                        }

                        try{
                            serialPort.setSerialPortParams(57600,
                                                         SerialPort.DATABITS_8,
                                                         SerialPort.STOPBITS_1,
                                                         SerialPort.PARITY_NONE);
                        }catch (UnsupportedCommOperationException e) {
                        }

                        try{
                            serialPort.notifyOnOutputEmpty(true);
                        } catch (Exception e){
                          System.out.println("Error setting event notification");
                          System.out.println(e.toString());
                          System.exit(-1);
                        }

                        try {
                        serialPort.addEventListener(null);
                        //serialPort.addEventListener(new SerialListener(this));
                        System.out.println("Action listener was added!");
                        } catch (TooManyListenersException tmle){
                        System.out.println("Exception "+tmle);
                        }

            int result = JOptionPane.showConfirmDialog(null, "Referenzfahrt jetzt starten?", "", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE);

            if (result == 0) {                      //Yes
                              ausgeben("1OR\r\n");
            }
         }
       }
     }

          if (!portFound){
              System.out.println(defaultPort + " nicht gefunden");
              JOptionPane.showMessageDialog(null, defaultPort + " nicht gefunden", "", JOptionPane.INFORMATION_MESSAGE);
          }


      // Hier wird das Programm beendet und die serielle Schnittstelle geschlossen

      while (!(exit)){
      }
      serialPort.close();
      try{
                              Process p = Runtime.getRuntime().exec("wmic PROCESS WHERE (name=java.exe)DELETE"); //beendet alle java Prozesse
                             }catch (IOException e) {
                                                    System.out.println("Problem");
                             }
      System.out.println("Bis bald");
      System.exit(1);
    }

Danke für die Hilfe und Grüße...
 
G

Gast2

Gast
Moin,

crissyk hat gesagt.:
... Problem ist nur, dass die Prozessorauslastung mit Programmstart auf 100% geht und da bleibt, obwohl das Programm eigentlich nur etwas zu tun hat, wenn ein Button gedrückt wird.

nö ... hier folterst Du die CPU

Code:
      while (!(exit)){ }

beende einfach die Schnittstelle wenn das Fenster geschlossen wird

hand, mogel
 

crissyk

Mitglied
Hallo mogel,

da ich nur bastel muss ich nochmal fragen. sorry...

Also mit dem code
Code:
addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent evt)
      {
        exit = true;
      }
setze ich exit=true wenn das Fenster geschlossen wird.

Das Problem sitz an der von Dir genannten Stelle, super, dass Du das gleich gesehen hast

wenn ich
Code:
//     while (!(exit)){
//     }
//      serialPort.close();
//      System.out.println("Bis bald");
//      System.exit(1);

das alles auskommentiere dann ist die Auslastung bei 1%, nur das Schließen des Fenster geht nicht mehr. gegen was muss ich denn das while (!... tauschen, dass das klappt?

Gruß und danke!
 

crissyk

Mitglied
Hallo,

habs selbst geschafft!

Code:
void schliesseSerialPort()
        {

                        System.out.println("Schließe Serialport");
                        serialPort.close();
                        System.exit(1);

        }

und in den Windowlistener schliesseSerialPort() geschrieben.

Danke für den Tip! Ich komm auf euch zurück... :D
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Prozessorauslastung Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben