JavaFX Klasse wird nicht als public erkannt

cyrano

Mitglied
Hallo zusammen, ich habe mir schon vor längerer Zeit eine kleine Bibliothek geschrieben, mit der ich den Einsatz der rxtxComm-Bibliothek für die serielle Schnittstelle vereinfache. Das klappte bislang unter Swing absolut problemlos und nun wollte ich das Ganze auf JavaFX portieren. Das ist deshalb notwendig, weil ich spezifische Controls verwende, z. B. zum Auflisten der vorhandenen Schnittstellen. Die Klasse heißt "PortSerial".

Was mich allerdings total irritiert ist die Tatsache, das ich es noch nicht einmal schaffe, die Klasse überhaupt zu instanziieren. Um alles möglichst überschaubar zu halten, habe ich in Netbeans eine Standard-FX-Applikation angelegt und in der Hauptklasse nichts anderes getan als ein Objekt meiner Klasse "PortSerial" zu erzeugen. Die Bibliothek ist eingebunden, die Klasse wird auch erkannt und ich erhalte beim Erstellen des Codes keine Fehlermeldungen. Compiliere ich das Programm allerdings, erhalte ich die Meldung:

Code:
error: PortSerial() is not public in PortSerial; cannot be accessed from outside package
        myPort = new PortSerial();

Ich habe erstmal keinen Code hier eingestellt, weil es eigentlich nur dieser einzige Aufruf ist und ich auch nicht genau weiß, welche Infos für die Lösung des Problems hilfreiche wären. Wenn mir jemand einen Rat geben könnte, wäre ich sehr dankbar.🙁
 
Zuletzt bearbeitet:
Kompilierst du die richtige Klasse? Guck da noch mal nach.

Stell doch mal den Aufruf und die Klasse stark gekürzt hier rein.

Kannst du ein kskb erstellen?
 
Hallo Gucky,

danke für die schnelle Antwort. Ja, ich kompliere schon die richtige Klasse. Läuft ja eh über die IDE. Also der Ablauf war folgender:

1. Ich erstelle unter Netbeans eine neue FX-Applikation. Das ist einfach eine Mini-Anwendung mit einem Fenster (bzw. Stage). Die Ausführung klappt ja dann auch.

2. Jetzt importiere ich mein PortSerial-Package als jar-Datei.

3. Und denn erweitere ich einfach nur die Hautklasse wie folgt:

Java:
public class SimpleFXProgram extends Application
{
    PortSerial myPort;
    
    @Override
    public void start(Stage primaryStage)
    {
    
        myPort = new PortSerial();
        
        Button btn = new Button();
        btn.setText("Say 'Hello World'");
        btn.setOnAction(new EventHandler<ActionEvent>()
        {
            
            @Override
            public void handle(ActionEvent event)
            {
                System.out.println("Hello World!");
            }
        });

Neu sind nur die beiden Aufrufe, in denen ich das Objekt "myPort" erzeuge.

Ich mache es ganz genau so in einer herkömmlichen Java-Applikation und dort läuft alles ohne Probleme.
 
Zuletzt bearbeitet:
Hier ist mal der erste Teil. Die ganzen Methoden werden ja eh noch nicht angesprochen, also denke ich mal, dass ja nur der Konstruktor und die Klasse selbst von Interesse sind. Obwohl das auch eigentlich eine ganz einfache Sache ist:

Java:
public class PortSerial
{
    private SerialPort serialPort;
    private CommPortIdentifier serialPortId;
    private BufferedReader portReader;
    private OutputStream outStream; 
    private String sCom;
    private String sHexValue;
    private int baudRate;
    private int numData;
    private int numStop;
    private int parity;
    private int iValue;
    private boolean isOpen;
    private JTextField readField;
    
    public PortSerial()
    {
        baudRate = 9600;
        numData = SerialPort.DATABITS_8;
        numStop = SerialPort.STOPBITS_1;
        parity = SerialPort.PARITY_NONE;
        isOpen = false;
    }

Was jetzt aber sehr seltsam ist, ich habe die Bibliothek noch mal neu compiliert und auch noch mal neu eingebunden und jetzt erhalte ich eine ganz andere Fehlermeldung, nämlich:

Code:
Exception in Application start method
java.lang.reflect.InvocationTargetException
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

geht noch endlos weiter, ich habe nur die ersten 3 Zeilen gepostet. ;(
 
Zuletzt bearbeitet:
denke nicht, dass es ein Grundätzliches JavaFX-Problem ist. Klingt eher so, als ob die benötigten Libs (für den Serial-Port) nicht richtig mit eingebunden werden. Jedenfalls nicht im Build, denn beim programmieren selbst scheinst du ja keine Probleme zu haben...
NetBeans, IntelliJ der Eclipse?
 
Hallo dzim, ich arbeite mit Netbeans. Ich kann mir auch nicht wirklich vorstellen, dass es sich um ein grundlegendes FX-Problem handelt. Hab jetzt mal den Quellcode der PortSerial-Klasse direkt ins Projekt kopiert und dann lässt sich das Programm fehlerfrei kompilieren und starten. Was mich einfach irritiert, ist die Tatsache, dass das Einbinden ja bei einem herkömmlichen Java-Programm (Swing) keinerlei Probleme bereitet, bei der FX-Variante aber nicht läuft. Und auch dort kommt es ja zu den beiden oben beschriebenen Fehlern. Werd mal weiter rum probieren.
 

Zurück
Oben