Klasse in eine extra Java-Datei

Status
Nicht offen für weitere Antworten.

wildbret

Aktives Mitglied
Hallo,

ich wollte mein Programm etwas übersichtlicher gestalten und habe deswegen eine Klasse aus der Datei in eine neue Java-Datei verlagert.
Ich habe die imports und extends gemacht und es kompiliert fehlerfrei.

Aber bei Ausführung des Programmes gibt es jetzt eine Exception die vorher nicht auftrat.
Es handelt sich um ein Programm, dass Daten über die serielle Schnittstelle sendet.
Die ausgelagerte Klasse dient dazu die Daten zu empfangen und in ein TextField auszugeben.

Exception in thread "Win32SerialPort Notification thread" java.lang.NullPointerException
at Receiver.serialEvent(Receiver.java:11)
at com.sun.comm.Win32SerialPort.sendDataAvailEvent(Win32SerialPort.java:649)
at com.sun.comm.NotificationThread.run(Win32SerialPort.java:878)

Hier die ausgelagerte Klasse, es wurde sonst nichts verändert weder an dieser Klasse noch an der von der sie erbt.
Was habe ich falsch gemacht, stimmt mit der Vererbung etwas nicht, oder darf ich die Klasse in diesem Fall nicht auslagern?

Code:
import java.io.IOException;
import javax.comm.SerialPortEvent;
import javax.comm.SerialPortEventListener;

@SuppressWarnings("serial")
public class Receiver implements SerialPortEventListener{
	  public void serialEvent(SerialPortEvent event) { 
		  if(event.getEventType()==SerialPortEvent.DATA_AVAILABLE){
		        byte[] readBuffer = new byte[256];
		        try {
		          while (in.available() > 0) {in.read(readBuffer);} 		          		         
		       
		          ausgabe.append("\n");
		          for (int i=0;i<readBuffer.length;i++) {
		        	  if(readBuffer[i]==0x02 && readBuffer[i+2]==0x55){        		  
		        		  byte laenge = readBuffer[i+1];
		        		  byte abc[] = new byte[laenge-1];
		        		  for (int j=0;j<(laenge-1);j++){
		        			  abc[j] = readBuffer[i+3+j];		        			  
		        		  }
		        		  String bca = new String(abc);
		        		  ausgabe.append(bca);
		        	  }  
		        	  if(readBuffer[i]==0x02 && readBuffer[i+2]!=0x55){
		        		  byte laenge = readBuffer[i+1];
		        		  for (int j=0;j<(laenge+4);j++){		        			  
		        			  int intumw = unsignedByteToInt(readBuffer[i+j]);
		        			  ausgabe.append(Integer.toHexString(intumw)+" ");
		        		  }      	        		  
		        	  }
		          } 
		        }
		        catch (IOException e) {System.out.println("Fehler: "+e);}		        
		  }    	      
	  }
  }

Wäre nett wenn mir da jemand einen Tip geben könnte.

Danke
 

Der Müde Joe

Top Contributor
dir Fehlen jetzt gewisse Dinge...zB

in.... in.avaiable()

was ist in?

in der anderen Klasse wahrscheinlich ein InputStream.
Aber in dieser Klasse nix.
 

wildbret

Aktives Mitglied
Ich poste mal die Teile der anderen Klasse von denen ich glaube, dass sie relevant sind.
Der Rest sollte nur GUI und so sein.

Code:
static CommPortIdentifier portID;  
  InputStream in;
  BufferedOutputStream B_out;
  OutputStream out;
  static SerialPort SP;
...
public class connectionListener implements ActionListener{	
	public void actionPerformed(ActionEvent e) {
		String command = e.getActionCommand();	
		
		if(command.equals("Verbindung aufbauen")){
			String PortNr = Gruppe.getSelection().getActionCommand();
			try{portID = CommPortIdentifier.getPortIdentifier(PortNr);
	        	SP = (SerialPort) portID.open("Framesend",2000); 
	        	ausgabe.append("\nPort "+PortNr+" geöffnet");
			}
			catch(Exception exc){
				System.out.println("Fehler :"+exc);
				ausgabe.append("\nFehler: ungültige Portauswahl!");
			}		
			try {in = SP.getInputStream();				
				out = SP.getOutputStream();
				//B_in = new BufferedInputStream(in);
				B_out = new BufferedOutputStream(out);
	    		SP.addEventListener(new Receiver());
			}
			catch (Exception e1) { System.out.println("Fehler: "+e1);}
				SP.notifyOnDataAvailable(true);
				int Baud = Integer.valueOf(Baudrate.getSelectedItem()).intValue();
			try {SP.setSerialPortParams(Baud,
	                                  SerialPort.DATABITS_8,
	                                  SerialPort.STOPBITS_1,
	                                  SerialPort.PARITY_NONE);}
			catch (UnsupportedCommOperationException e1) {}
		}
 

Der Müde Joe

Top Contributor
Was erbt denn der receiver? oder von wem besser gefragt?

Oder mach halt:

Code:
class Receiver implements...{

private InputStream in;

public Receiver( InputStream in){
this.in = in;
}

public void serialEvent....
}

dann hast du denn in auch ohne super aufzurufen.
wenn InpSt. in der super Klasse existiert, kannste auch
eine getter machen oder eben super

EDIT:
code angepasst
Erben = extends Irgendwas
 

wildbret

Aktives Mitglied
Oh sorry, ich hab in dem was ich kopiert habe ne Zeile falsch.

Code:
public class Receiver extends FrameSend implements SerialPortEventListener {

Ich dachtre der Receiver erbt alles was in FrameSend steht, das ist die Java-Datei wo die Klasse zuvor drin stand.
Die Klasse connectionListener die ich gepostet habe ist eine Unterklasse von FrameSend.
 

wildbret

Aktives Mitglied
Ok soweit so gut, ich habe deinen Konstruktor eingebaut und den Aufruf des Receivers in der anderen Klasse angepasst.
Die Exception ist weg und es gibt keine Fehler.
Seine Aufgabe erfüllen, nämlich ankommende Daten in das TextField zu schreiben tut der Receiver allerdings nicht.

Ich versuche mal das TextField (ausgabe) auch mit dem Konstruktor zu übergeben.
 

Der Müde Joe

Top Contributor
wildbret hat gesagt.:
Die Klasse connectionListener die ich gepostet habe ist eine Unterklasse von FrameSend.

nein ist sie nicht...sie erbt ja nix. falls du Innere Klasse meinst, das kann sein, ist aber keine Vererben.

InputStream und so.....wo ist das? kapiers jetzt nicht ganz.

PS: KlassenNamen inner mit Grossbuchstaben beginnen, varialblenname immer klein
 

Der Müde Joe

Top Contributor
mach doch einfach mal ein System.out.println da rein,
dann siehst du auch was abläuft.

Oder noch besser...debugger anwerfen und step by step
durch
 

wildbret

Aktives Mitglied
Stimmt du hast Recht, erinnere mich an meine Java Vorlesung, innere Klasse nennt man das :)
Der InputStream wird in der Hauptklasse FrameSend ganz am Anfang angelegt.

Code:
public class FrameSend extends Frame{	 
...
InputStream in;
...

Dann kommen einige Methoden und dann die innere Klasse ConnectionListener, in der der InputStream dem Serial Port zugewiesen wird.

Code:
public class connectionListener implements ActionListener{	
...
try {in = SP.getInputStream();			
...

Der Receiver greift diesen InputStream dann wieder auf.

Durch das hinzufügen der TextArea in deinen Konstruktor funktioniert das Programm jetzt wieder ! :)
Danke dir!

Code:
public Receiver(InputStream in,TextArea ausgabe){
		this.in = in;
		this.ausgabe = ausgabe;
	}
 

Der Müde Joe

Top Contributor
so macht aber die Vererbung keinen Sinn mehr und du kannst "extends FrameSend" weglassen.

in hättest du via super erreicht...also

super.in.avaiable()
oder in der superKlasse getIn() definnieren
und dies in der erbenden Klasse so aufrufen:
getIn().avaiable()
oder halt 1 mal
InputStream in = getIn();
 

wildbret

Aktives Mitglied
Hmm, ich habs mal versucht.

In der Superklasse habe ich folgende Methoden geschrieben.
Code:
public static InputStream getIN() {
	  return in;
  }
  public static TextArea getAusgabe() {
	  return ausgabe;
  }

Im Receiver habe ich das extends und den Konstruktor entfernt.
Code:
InputStream in = FrameSend.getIN();
	TextArea ausgabe = FrameSend.getAusgabe();

Ist das richtig und so wie du es dir gedacht hast?

Aber extends FrameSend ist mir aufgefallen muss ich trotzdem mache, weil ich eine Umformmethode aus der superklasse nutzen möchte.

*edit* nur leider gibt der Receiver jetzt wieder nichts mehr in ausgabe aus.
 

Der Müde Joe

Top Contributor
war eigentlich mit Vererbung ohne static gedacht.

dh:
Code:
protected InputStream getIn(){ return this.in;)

...
InputStream in = getIn();

die getIn() wird ja an die Unterklasse vererbt
 

Der Müde Joe

Top Contributor
Als Beispiel:

Code:
public class SuperKlasse {

	private String s = "hello";	
	protected String ss = "hello2";
	
	protected String getS(){
		return this.s;
	}
}

public class SubKlasse extends SuperKlasse{

	public static void main(String [] args){		
		SubKlasse sub = new SubKlasse();
		
		String s = sub.getS();		
		System.out.println(s);
		
		System.out.println(sub.ss);
		
		sub.test();
		sub.test2();
	}
	
	public void test(){
		System.out.println(super.ss);
	}
	
	public void test2(){
		System.out.println(getS());
	}
}

EDIT:
Beispiel erweitert...
getS() kann halt nicht im static kontext aufgerufen werden..darum im test drin
 

wildbret

Aktives Mitglied
So habe ich es jetzt umgesetzt, müsste genau so sein wie im Beispiel, aber jetzt kommt wieder die Exception.
Bisher hat es nur mit dem Konstruktor funktioniert, seltsamerweise.

Wofür ist eigentlich das protected. Selbst wenn ich (protected InputStream in;) schreibe klappt es nicht.

Code:
public class FrameSend extends Frame{	 
        InputStream in;
        TextArea ausgabe;

        protected InputStream getIn(){ return this.in;}
  
        protected TextArea getAusgabe() { return this.ausgabe;}
...
}

Code:
public class Receiver extends FrameSend implements SerialPortEventListener {	
	InputStream in = getIn(); 
	TextArea ausgabe = getAusgabe();
...
}
 

Der Müde Joe

Top Contributor
Exception? poste mal

public protected private sind für die Sichtbarkeit.

public....überall sichtbar
protected ...im selber package sichtbar
private ..nur in der klasse Sichbar
 

wildbret

Aktives Mitglied
die gleiche Exception wie am Anfang in der Zeile
Code:
while (in.available() > 0) {in.read(readBuffer);}

Exception in thread "Win32SerialPort Notification thread" java.lang.NullPointerException
at Receiver.serialEvent(Receiver.java:18)
at com.sun.comm.Win32SerialPort.sendDataAvailEvent(Win32SerialPort.java:649)
at com.sun.comm.NotificationThread.run(Win32SerialPort.java:878)
 

wildbret

Aktives Mitglied
Ich kann das eigentlich gut nachvollziehen was du mir gezeigt hast und kann nicht verstehen warum es mit den get-Methoden nicht geht mit dem Konstruktor vom Anfang aber schon.
 

Der Müde Joe

Top Contributor
ach...ich bin schuld......

so gehts nat nicht....die Vererbung geht schon, aber
receiver erbt nur und nimmt nicht automatisch die
Werte von einem anderen Objekt, auch wenn es
eine Superklasse ist.

Am besten du machts das mit Receiver(in, Ta)

EDIT:
new Receiver() ...macht ein neues Objekt....mit allem was auch in der Superklasse ist
wobei in und ta und so nat null sind für diese neue Objekt

Eigentlich ist Vererbung hier Fehl am Platze, da Receiver nix gemeinsam hat
mit FrameSend oder Frame
 

wildbret

Aktives Mitglied
Ok ich danke dir erstmal.
Habe einiges gelernt und die Klasse ist erfolgreich in eine neue Datei gewandert.
Jetzt versteh ich auch, warum sie in der Originaldatei ohne Konstruktor funktioniert hat. Weil sie eine innere Klasse war.

Da der Empfänger nun erfolgreich ausgelagert ist, werde ich morgen evtl. mal versuchen den Sender (auch eine innere Klasse von FrameSend) auch auszulagern.
Sinn und zweck des ganzen ist es die einzelnen Funktionen von der GUI zu trennen und das ganze übersichtlicher zu machen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
berserkerdq2 Intelij, wie kann ich einstellen, dass die aktuelle Klasse ausgeführt wird, wenn ich aufs Startsymbol drücke, gibts da eine Tastenkombination? Java Basics - Anfänger-Themen 11
J Zugriff auf eine 2. Klasse die per UI-Designer erstellt wurde Java Basics - Anfänger-Themen 1
_user_q Wie eine Methode/Funktion aus einer Klasse mit Constructor aufrufen? Java Basics - Anfänger-Themen 20
frager2345 Singleton-Muster Java ->Nur eine Instanz einer Klasse erzeugen können Java Basics - Anfänger-Themen 45
berserkerdq2 Habe eine Klasse, welche public ist, diese hat eine public Methode, die nicht static ist. Wenn ich nun versuche aufzurufen Probleme? Java Basics - Anfänger-Themen 8
berserkerdq2 Zwei Klassen Erben von der Klasse A, die eine Klasse kann ich an Methoden übergeben, die als Parameter A haben, die andere nicht? Java Basics - Anfänger-Themen 3
F Suche nach betreuender Person für eine Jahresarbeit der 12. Klasse. Java Basics - Anfänger-Themen 6
M Wie kann ich eine Methode aus einem Interface in eine Klasse implementieren, so dass sie ihre Funktion ausführt? Java Basics - Anfänger-Themen 7
Igig1 Welche Werte sind als default Werte in einem Array, der als Datentyp eine Klasse hat? Java Basics - Anfänger-Themen 1
O Wie erstelle ich eine Instanz in einer Klasse für die ich die Instanz will? Java Basics - Anfänger-Themen 4
Vivien Auf eine Variable von einer anderen Klasse aus zugreifen Java Basics - Anfänger-Themen 3
E Warum lässt sich eine Klasse nicht starten, wenn eine andere Klasse in dem Modul fehlerhaft ist? Java Basics - Anfänger-Themen 1
P Wie rufe ich Methoden mit einer Referenz auf eine Klasse||Objekt auf Java Basics - Anfänger-Themen 4
jonny_2k12 Wie kann ich eine ArrayList aus einer Klasse in eine andere übergeben? Java Basics - Anfänger-Themen 21
M Zugriff auf eine ArrayList in einer anderen Klasse Java Basics - Anfänger-Themen 4
bensdt Klasse erweitern um eine Methode "void decrement()" Java Basics - Anfänger-Themen 5
D OOP- Eine Klasse in mehrere Klassen aufteilen Java Basics - Anfänger-Themen 7
W Zwei Programme sollen auf eine Klasse zugreifen Java Basics - Anfänger-Themen 18
L Klassen Wie “installiert” man eine Klasse? Java Basics - Anfänger-Themen 2
L Klassen Kann eine Unterklasse einer abstrakten Klasse ein Interface implementieren? Java Basics - Anfänger-Themen 2
H Eine befühlte Klasse weiter geben an Controller Java Basics - Anfänger-Themen 12
I Wie benutzt man eine Klasse? Java Basics - Anfänger-Themen 13
A Variablen Main Klasse soll auf eine andere Klasse zugreifen Java Basics - Anfänger-Themen 3
F OOP Instanz einer Klasse an eine andere weitergeben Java Basics - Anfänger-Themen 16
M Aufgabe: Eine Klasse und viele Untermethoden Java Basics - Anfänger-Themen 30
DaCrazyJavaExpert Klassen Von einer Klasse auf eine erbende Klasse zugreifen Java Basics - Anfänger-Themen 13
L Eine Klasse aus dem gleichen Package starten Java Basics - Anfänger-Themen 3
B Wie kann ich eine Methode einer selbst erstellten Klasse statisch importieren? Java Basics - Anfänger-Themen 5
D Klasse durch eine Schleife wiederholen Java Basics - Anfänger-Themen 1
J Werte an eine andere Klasse übergeben Java Basics - Anfänger-Themen 4
T Erste Schritte Schreiben Sie eine Klasse Zeit, die eine Zeitdauer in Minuten beschreibt. Die Anzahl Minuten verwalt Java Basics - Anfänger-Themen 3
U Klassen IntelliJ14.1.1 Ultimate startet eine Main-Klasse NICHT MEHR Java Basics - Anfänger-Themen 0
P auf eine andere Klasse zugreifen Java Basics - Anfänger-Themen 12
OlafHD Einen String an eine Klasse übergeben Java Basics - Anfänger-Themen 2
O Übergabe in eine andere Klasse Java Basics - Anfänger-Themen 3
I Java Eingabe aus einer anderen Klasse in eine andere an Konstruktor übergeben Java Basics - Anfänger-Themen 4
E Suche Klasse die eine Bedinung prüft und einen von zwei Auswahlwerten zurückgibt... Java Basics - Anfänger-Themen 6
V wie kann ich eine laufende Klasse zum "stopen" bringen und zur main zurückkehren? Java Basics - Anfänger-Themen 11
W (XML/XSL) Daten aus Eclipse in eine Klasse Laden. Java Basics - Anfänger-Themen 1
S Methoden eine Instanz einer eigenen Klasse als parameter übergeben Java Basics - Anfänger-Themen 9
S Wann existiert eine Instanz (eigene Klasse) Java Basics - Anfänger-Themen 8
M Wann eine Wrapper Klasse verwenden und wann einen primitiven Datentypen? Java Basics - Anfänger-Themen 8
S Aus einer Klasse eine andere laden Java Basics - Anfänger-Themen 6
D Wie baue ich sinnvoll eine Klasse, genauer die Methodenaufrufe auf? Java Basics - Anfänger-Themen 4
S Interface Implementieren von Methoden aus einer Klasse in eine GUI Java Basics - Anfänger-Themen 6
M Klasse fuer eine 5er Liste? Java Basics - Anfänger-Themen 5
R Interface Datentyp bei Erzeugung eines Objekts, dessen Klasse eine Schnittstelle implementiert Java Basics - Anfänger-Themen 18
G Klassen Array durch eine Klasse aufrufen Java Basics - Anfänger-Themen 4
J Mehrere Klassen in eine Klasse schreiben? Java Basics - Anfänger-Themen 7
N Kann man in einem Projekt nur eine Klasse ausführen? Java Basics - Anfänger-Themen 6
K Zugriff einer Klasse auf eine andere Andere -> bad operand for binary operator Java Basics - Anfänger-Themen 5
W Klassen Kann eine Variable nicht aus einer Klasse bekommen Java Basics - Anfänger-Themen 9
J Variablen Array aus anderer Klasse auslesen-Wie verhindert man eine NullPointerException? Java Basics - Anfänger-Themen 4
M Klassen Eine Klasse abrufen ohne eine neue Instanze auf zu rufen? Java Basics - Anfänger-Themen 8
M Eine Klasse als .dmg (MAc) abspeichern Java Basics - Anfänger-Themen 5
P Eingabe aus JTextField/Area an eine andere Klasse übergeben. Java Basics - Anfänger-Themen 2
A Threads Eine Klasse muss auf Variable der Anderen warten. Java Basics - Anfänger-Themen 6
L Methoden Eine Methode aus einer anderen Klasse aufrufen Java Basics - Anfänger-Themen 4
D OOP Zugriff auf eine Klasse aus einem Interface-Objekt Java Basics - Anfänger-Themen 7
E Wert in eine andere Klasse übergeben Java Basics - Anfänger-Themen 3
L Klassen Kann eine Klasse sich selbst returnen? Java Basics - Anfänger-Themen 26
L Über abstrakte Klasse auf eine Klasse zugreifen? Java Basics - Anfänger-Themen 6
N OOP Zugriff auf eine Objekt innerhalb einer Klasse aus statischen Methoden Java Basics - Anfänger-Themen 9
M 2Methoden eine Klasse 1 Thread Java Basics - Anfänger-Themen 3
S Von einer Klasse auf eine Liste einer anderen Klasse zugreifen Java Basics - Anfänger-Themen 8
J eine Klasse mit speziellem Parameter aufrufen und verwenden Java Basics - Anfänger-Themen 9
M Suche eine Klasse, mit der ich Mausklicks ausführen kann. Java Basics - Anfänger-Themen 3
E Variable aus einer Methode heraus in eine andere Klasse übergeben Java Basics - Anfänger-Themen 13
B Was passiert, wenn eine konkrete Klasse von generische Klasse erbt? Java Basics - Anfänger-Themen 14
Q 2 Objekte in eine Klasse übergeben Java Basics - Anfänger-Themen 10
J OOP Zugriff einer Klasse auf eine Andere Java Basics - Anfänger-Themen 8
B Eine neue Klasse in anderen Projekten nutzen Java Basics - Anfänger-Themen 5
S Zwei Programme verwenden eine selbe Klasse Java Basics - Anfänger-Themen 4
M Zwei Threads greifen auf eine Methode einer Klasse zu. Komplikationen? Java Basics - Anfänger-Themen 18
S Wann wird eine Klasse geladen? Java Basics - Anfänger-Themen 17
F wie auf eine andere Klasse zugreifen? Java Basics - Anfänger-Themen 2
D Wie neue Instanz einer Klasse erstellen, von der ich nur eine andere Instanz kenne? Java Basics - Anfänger-Themen 13
-horn- EINE setter/getter klasse aus mehreren klassen befüllen Java Basics - Anfänger-Themen 13
C Auf eine Klasse byteweise zugreifen Java Basics - Anfänger-Themen 16
M Wie setzt sich eine Klasse zusammen? Java Basics - Anfänger-Themen 16
L Aus einer Methode eine eigene Klasse machen - modular coden Java Basics - Anfänger-Themen 14
H Eine Abstrakte Klasse muss. Java Basics - Anfänger-Themen 7
J Zugriff auf ein Array über eine andere Klasse Java Basics - Anfänger-Themen 7
G kein Zugriff auf eine Klasse in einem Unterordner Java Basics - Anfänger-Themen 11
E Eine Klasse hat eine Instanz von sich selbst. Java Basics - Anfänger-Themen 6
M Übergabe von Variablen in eine Klasse Java Basics - Anfänger-Themen 13
G Zugriff auf eine Klasse beschränken. Java Basics - Anfänger-Themen 6
A Konstruktorübergabe von einer klasse an eine andere Java Basics - Anfänger-Themen 2
G Eine Klasse als Rückgabetyp? Java Basics - Anfänger-Themen 12
G Java Klasse durch eine andere Java Klasse starten? Java Basics - Anfänger-Themen 13
B Wie aus instanzierter Klasse eine Methode der Main-Klasse Java Basics - Anfänger-Themen 9
philipp Wie kann ich eine Funktion einer Klasse benutzen ? Java Basics - Anfänger-Themen 2
MasterEvil Eine Klasse von mehreren Klassen ableiten? Java Basics - Anfänger-Themen 12
M Methode einer Klasse in eine andere Übergeben Java Basics - Anfänger-Themen 4
T Methoden für GUI in eine andere Klasse Java Basics - Anfänger-Themen 2
H Was ist nocheinmal eine statische Klasse? Java Basics - Anfänger-Themen 6
S Variablenwert von einer Klasse in eine andere Klasse geben Java Basics - Anfänger-Themen 2
I eine Klasse aus der Jar-Datei aus dem Servlet starten Java Basics - Anfänger-Themen 4
M Braucht jede Klasse eine Schnittstelle ? Java Basics - Anfänger-Themen 4
C Methoden von verschieden Klassen in eine Klasse reinpacken? Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben