Eine Klasse in meinem Programm verwenden (Netbeans)

Andre_Java

Mitglied
Ich habe eine Klasse namens comframe von einer externen Quelle. Die Klasse an sich funktioniert einwandfrei. Ich möchte diese jetzt in meinem Programm benutzen.
comframe:
PHP:
import java.io.*;
import javax.comm.*;
import java.awt.*;
import java.awt.event.*;

public class comframe extends Frame{
  static CommPortIdentifier portID;
  InputStream ins;
  OutputStream out;
  static SerialPort serss;
  TextArea ausgabe;
  TextField tfe;
  Button bt;

  public static void main(String[] args){
    try{portID = CommPortIdentifier.getPortIdentifier("COM1");
        serss = (SerialPort) portID.open("mein_programm",2000);
        comframe f = new comframe();
        f.setSize(330,250);
        f.show();
    }
    catch(Exception exc){System.out.println("Fehler :"+exc);}
  }

  public comframe() {
    this.addWindowListener(new WindowAdapter(){
      public void windowClosing(WindowEvent e){
        dispose();
        System.exit(0);
      }
    });
    setLayout(new FlowLayout());
    add(tfe=new TextField(40));
    tfe.addActionListener(new sendeListener());
    add(bt=new Button("Senden"));
    bt.addActionListener(new sendeListener());
    add(ausgabe=new TextArea("Port COM2 geöffnet\n",7,40));
    try {ins = serss.getInputStream();
         out = serss.getOutputStream();
         serss.addEventListener(new commListener());
    }
   catch (Exception e) { System.out.println("Fehler: "+e);}
    serss.notifyOnDataAvailable(true);
    try {serss.setSerialPortParams(2400,
                                   SerialPort.DATABITS_8,
                                   SerialPort.STOPBITS_1 ,
                                   SerialPort.PARITY_NONE);}
    catch (UnsupportedCommOperationException e) {}
  }

  public class sendeListener implements ActionListener{
    public void actionPerformed(ActionEvent e){
      PrintWriter aus = new PrintWriter(out);
      aus.println(tfe.getText());
      aus.flush();
      aus.close();
    }
  }

  public class commListener implements SerialPortEventListener{
    public void serialEvent(SerialPortEvent event) {
      if(event.getEventType()==SerialPortEvent.DATA_AVAILABLE){
        byte[] readBuffer = new byte[20];
        try {
          while (ins.available() > 0) {int numBytes = ins.read(readBuffer);}
          String nachricht = new String(readBuffer);
          ausgabe.append(nachricht);
        }
        catch (IOException e) {System.out.println("Fehler: "+e);}
      }
    }
  }

}

Und so sieht mein Programm aus: (ein leeres Netbeans Projekt)
PHP:
package xyz;
import java.io.*;
import javax.comm.*;
import java.awt.*;
import java.awt.event.*;

public class Main {
    
    
    public Main() {
    }
    
    public static void main(String[] args) {
        // TODO code application logic here
    }
    
}

Was muss ich jetzt in die Main-Schleife schreiben, damit die Klasse aufgerufen wird? Das was in der Klasse unter Main steht ist ja nur in der Klasse gültig.

Ich rufe meine Klasse jetzt folgendermaßen auf und bekomme eine NullPointerException:
PHP:
        //TODO....
        comframe f = new comframe();
        try{f.portID = CommPortIdentifier.getPortIdentifier("COM1");
        f.serss = (SerialPort) f.portID.open("mein_programm",2000);
        f.setSize(330,250);
        f.show();
    }
    catch(Exception exc){System.out.println("Fehler :"+exc);}
 
Zuletzt bearbeitet:
Du hast doch in der oberen Klasse auch ein Main methode, dann kopier doch einfach das Zeug rueber?! Oder du musst die Main methode aus der oberen Klasse rausnehmen, und dann ein neues Object von comframe in der Main Klasse erzeugen.
Und man schreibt Klassennamen gross ^^ Du hast comframe klein geschrieben
 
Das habe ich ja zuerst auch versucht. Die Variablen "portID" und "serss" sind ja Klassen-Attribute. Deswegen habe ich den Klassennamen mit dem Punkt vorangestellt, also "f.portID" und "f.serss" (siehe oben). Das Programm lässt sich kompilieren, bricht aber nach dem Start mit der oben genannten Fehlermeldung ab.
 
Zurück