Beansbinding

Thommy7571

Mitglied
Hallo,

ich habe mehrere Programme, die noch Beansbinding verwenden. Es war zwar schwierig, die entsprechende Datei zu finden aber hier ist sie verfügbar.

http://www.java2s.com/Code/Jar/b/Downloadbeansbinding121jar.htm

Mein Programm verwendet mehrfach die entsprechenden Klassen und kommt ohne diese nicht aus. Ich habe bereits mehrere Stunden versucht, die Datei so einzubinden, dass die Klassen gefunden werden, bedauerlicherweise ohne Erfolg!
Ich habe die Datei auch als Library mit korrektem Package Name eingebunden, sie wird aber nicht von Apache Netbeans 16 gefunden, obwohl alle Klassen unter org.jDesktop.beansbinding. im Library Ordner zu sehen sind. Ich verwende Apache NetBeans 16 unter Windows 10. und erhalte einen Import Fehler.
In einem anderen Fall sind die Dateien unter dem korrekten Package-Name direkt unter der Library in der jar-Datei.
(Sorry Bild kann man nicht lokal einbinden, über URL habe ich keine Ressourcen.)
In einem anderen Fall sind die Klassen unter der Datei in einem Default-Package. Dies lässt sich aber nicht ändern, auch verschieben lassen sich die Klassen nicht.

Allerdings kann ich weder ohne Default-Package noch mit Default-Package auf die Klassen zugreifen.

Unter Apache 15 hatte ich die Klassen 2019 noch einbinden können, unter Apache 16 klappt es irgendwie nicht.

Kann jemand helfen?

Thommy7571
 
Zuletzt bearbeitet von einem Moderator:

KonradN

Super-Moderator
Mitarbeiter
Bitte immer die genauen Fehlermeldungen bringen! Das geht auch ohne Screenshot, da es ja einfacher Text ist.

Und was genau machst Du? Was für ein Projekt hast du? Welche Java Version verwendet Du? Lauter solche Details sind wichtig!

Wenn ich raten müsste, dann hast Du nun Probleme, da du ein java >= 9 einsetzt und es da mit den Modulen probleme gibt (ggf. weil da Module nicht geöffnet worden sind und daher Reflection Zugriffe fehlschlagen). Aber das ist ein wildes raten, das nicht wirklich Sinn macht.
 

Thommy7571

Mitglied
Der Text war ja auch schon so sehr lang. Danke, der Nachfrage:
Ich habe zwei GUI Projekte im Rahmen einer Fortbildung erstellt, die ich zum Laufen bringen möchte.
Im Code erscheint die Fehlermeldung neben der Importanweisung für die Klassen mit Packagename,
dass das Package und die Klasse nicht vorhanden ist. Danach natürlich bei jeder Verwendung der Klassen.
Ich verwende Java 11 unter Apache Netbeans 16, Einstellung Kompatibilität mit Java 1.6.
Ich habe unter Eigenschaften es an mehreren stellen probiert: Class path, Module vor allem schien mir "Compiled code" sinnvoll zu sein, aber
das hängt natürlich von der jar-Datei ab (Ich habe mit "Sources" und nur Class-Dateien.
Aber in der Tat blicke ich an der Stelle nicht durch, wo ich was verwenden muss.
Thommy7571
 

KonradN

Super-Moderator
Mitarbeiter
Dann versuche es erst einmal bitte mit Java 8. Ab Java 9 kommen da immer Module mit rein und das willst Du nicht. Daher alles komplett mit Java 8 machen. Das wäre mein erster Ratschlag.
 

Thommy7571

Mitglied
Ich habe zwar die Java 11JDK installiert, aber das Projekt läuft unter Java 1.6.
Es mag da sicherlich Potenzial für Kompatibilitätsprobleme geben, aber die sind nicht relevant,,
solange ich alles unter Java 1.6 laufen lasse..
Außerdem, bevor Java das angegebene Beansbinding-Paket findet, können auch keine
Kompatibilitätsprobleme auftauchen.
Daher zielte meine Anfrage explizit nur auf die Unterstützung zum Einbinden
der Beansbinding-Klassen ab. Irgendeine Idee, was das Problem sein könnte?
 

KonradN

Super-Moderator
Mitarbeiter
Also meine Idee habe ich Dir gesagt, schön, dass Du meinst, dass es für Dich nicht relevant ist.

Die genaue Fehlermeldung des Java Compilers fehlt aber immer noch.

Und mein Ratschlag ist immer noch, auch für die Übersetzung ein java 8 zu verwenden, denn diese "nicht relevanten Probleme" sind eben öfters doch sehr relevant und schlagen sich in Build Fehlern nieder. Und eben genau diese scheinen ja für Dich relevant zu sein.

Das ist derzeit die einzige Auskunft, die ich Dir geben kann mit den Daten, die Du bisher gegeben hast.
 

mihe7

Top Contributor
Ich gehe mal davon aus, dass es sich um ein ant-Projekt handelt. Das habe ich gerade mal angetestet, so dass ich bestätigen kann, dass sich der Spaß mit JDK 17 problemlos einbinden und ausführen lässt.

1. Sicherstellen, dass unter Libraries die Jar-Datei auftaucht
1677223881801.png
2. Sicherstellen, dass im default package des Projekts keine module-info.java existiert.
3. Sicherstellen, dass in den Projekteigenschaften nur der Classpath gesetzt wird
1677224941976.png
4. Bei der Bearbeitung der Java-Datei mal Strg + Shift + I (wie Ida) drücken bzw. unter Source -> Fix Imports, um die Imports zu korrigieren.

Wenn NB immer noch meckert, könnte es sein, dass der Cache hinüber ist. Den einfach mal löschen (unter Windows befindet sich der unter %USERPROFILE%\AppData\Local\NetBeans\Cache); davor natürlich NetBeans schließen.
 

Thommy7571

Mitglied
YES mihe7, genau so sah das bei mir auch aus. Funktionieren tat es aber nicht.
zu meinem Problem:
Verwirrend kommt aber hinzu, dass ich mich entsinne irgendwie ein PlugIn
installiert zu haben (org-netbeans-modules-form-binding11.nbm),
so dass ich gar nicht mehr weiß, was wirklich funktioniert hatte.
Mir war einfach nichtklar, wo die Datei beansbinding liegen muss
und welche Datei genau - die mit Sources oder ohne? oder ist das egal?
über Properties auf Libraries war klar, aber danach?
1) compile; modulepath oder class path?
2) Prozessor: modulepath oder class path?
oder
3) Run: modulepath oder class path?
unter for compiling sources,
oder compiled sources:
Und hast DU den relativen oder absoluten Pfad gewählt auf der rechten Seite?

1) Deine Antwort war die Lösung, alles einfach, wenn man weiß, wie es geht...
Aber damit das mal klarer wird, woher weiß ich, was an welcher Stelle das einzubinden ist?
Manchmal bindet man ja auch Projekte ein.
2) Ich habe - leider - in der Tat ein Default Source Package (Warum hat Java das erstellt?),
aber darin befindet sich nichts (Ich habe versucht es loszuwerden, kann es aber nicht löschen...)
3) Darüber hinaus findet er java.beans.PropertyChangeSupport nicht. (nicht in org.jdesktop.beansbinding.) und er findet org.netbeans.api.* nicht. Eine Idee, was das für Klassen sind? Weißt DU wodurch die Klassen vom alten Netbeans in Apache Netbeans ersetzt wurden?


Vielen Dank schon einmal!!!!!
 

Thommy7571

Mitglied
Also meine Idee habe ich Dir gesagt, schön, dass Du meinst, dass es für Dich nicht relevant ist.

Die genaue Fehlermeldung des Java Compilers fehlt aber immer noch.

Und mein Ratschlag ist immer noch, auch für die Übersetzung ein java 8 zu verwenden, denn diese "nicht relevanten Probleme" sind eben öfters doch sehr relevant und schlagen sich in Build Fehlern nieder. Und eben genau diese scheinen ja für Dich relevant zu sein.

Das ist derzeit die einzige Auskunft, die ich Dir geben kann mit den Daten, die Du bisher gegeben hast.
Danke trotzdem für die Hilfe, eine einfache Antwort kann man an dieser Stelle nur geben, wenn man mit den Details bestens vertraut ist... - vielleicht war es aber auch ein totales Anfänger Problem von meiner Seite und deshalb zu einfach.. Netbeans und was wo einzubinden ist, Beansbinding auch ein bisschen, aber es könnte vermutlich jede andere Datei sein, es sei denn man hat noch ein Versionsproblem - wie von Dir festgestellt. Sorry, ich habe extra nicht gesagt, das die Antwort nicht relevant sei - auch wenn sich das jetzt vieleicht so anhörte - aber zumindest bei der Problemstellung war sie es nicht - hätte es aber natürlich noch werden können, durch die Java-Versions-Unterschiede. Die Fehlermeldung hatte ich gesagt, soweit ich mich entsinne: " Package org. .... .Beansbinding" nicht vorhanden". (bei den Importen
Aber ohne Einbindung kein Versionsproblem - daher hatte mir die Antwort nicht wirklich geholfen - Ich blicke einfach nur nicht durch - schätze ich - was ich wo einbinden muss.
Die Antwort des vorigen Postings war die Lösung - die Klassen werden jetzt gefunden.
Ich vergaß zu erwähnen, dass ich sowieso Java8 verwendet habe (automatisch durch Netbeans gesetzt).
Grüße

Thommy7571
 

mihe7

Top Contributor
Die Antwort des vorigen Postings war die Lösung - die Klassen werden jetzt gefunden.
Du hast die Gabe, in Deinen Texten die relevanten Punkte auszulassen oder nur vage zu umschreiben: wir wissen immer noch nicht wirklich, was nun das Problem war. Aus Deiner anderen Antwort kann ich nur mutmaßen, dass die Datei im Modulepath lag. Aber das ist reine Spekulation. Daher bitte immer solche Dinge dazuschreiben, wir wissen ja nicht, was Du am Bildschirm siehst.

Aber damit das mal klarer wird, woher weiß ich, was an welcher Stelle das einzubinden ist?
Das Problem, das @KonradN auch schon angesprochen hatte, ist, dass Java mit Version 9 ein Modulsystem (Java Platform Module System, kurz JPMS) bekommen hat. Daher gibt es seit Java 9 neben Typen, Paketen und dem Classpath nun auch noch Module und einen Modulepath.

Vereinfacht kann man sagen: wenn Du keine modulare Anwendung (i. S. von JPMS) schreiben willst, dann verwendest Du den Classpath.

und welche Datei genau - die mit Sources oder ohne? oder ist das egal?
Das ist nicht egal. Jars sind einfach Zip-Dateien. In der Regel befindet sich in der sources-Datei tatsächlich nur der Quelltext; der ist für das Kompilieren unbrauchbar (eine solche Jar kann von der IDE verwendet werden, um Dir vernünftige Variablennamen bei der Autovervollständigung anzuzeigen, außerdem kann Dir der Quelltext angezeigt werden, wenn Du im Editor in eine Methode aus dem Jar springst; die sources-Jar würde man in NetBeans unter Tools->Librariers aufnehmen). Du nimmst also die ohne -sources in den Classpath auf. Manchmal haben die Jars auch explizit ein -bin im Namen.

Compile: alles, was bereits zum Kompilieren benötigt wird. Wenn Du im Editor also ein Paket aus einer Bibliothek ansprechen musst, muss die betreffende Jar hier rein.
Processor: alles, was zusätzlich für das Annotation Processing benötigt wird (z. B. kann man hier den Annotationprocessor von Eclipselink angeben, der Quelltext generiert; Lombok dürfte man auch hier nennen können; müsste ich aber alles erst ausprobieren)
Runtime: alles, was nicht zum Kompilieren sondern erst zur Laufzeit benötigt wird (z. B. JDBC-Treiber)

Willst Du z. B. eine Anwendung schreiben, die mit beansbinding und gegen eine MySQL-Datenbank arbeitet, kannst Du die beansbinding-Jar unter Compiler angeben, den JDBC-Treiber von MySQL dagegen unter Runtime, da Du in Deinem Code nicht explizit Klassen des Treibers verwendest. Und, da die Anwendung nicht modular sein soll, alles im Classpath.
 

Thommy7571

Mitglied
Hallo, danke an alle. Ja, das kann ich nachvollziehen. Sorry deswegen, ich hatte auch nicht wirklich verstanden, was das Problem ist. Meist ist es ja so, dass man dann schon fast die Lösung hat.
Ich erinnere mich nicht mehr, wie die Eigenschaften an dieser Stelle in Netbeans vor 10 oder 13 Jahren aussahen und wusste nichts von den Modulen bzw. konnte nicht nachvollziehen, wo die ganzen verschiedenen Eingabemöglichkeiten jeweils für da waren.
Nachstehend meine Aussagen aus den zwei Postings - Vielleicht hätte ich noch genauer angeben können, was ich ausprobiert habe - aber es waren einfach zu viele Möglichkeiten, wenn man (wie ich offenbar an dieser Stelle) gar keinen Plan hat.
<<<Mein Programm verwendet mehrfach die entsprechenden Klassen und kommt ohne diese nicht aus. Ich <<<habe bereits mehrere Stunden versucht, die Datei so einzubinden, dass die Klassen gefunden werden, <<<bedauerlicherweise ohne Erfolg! Ich habe die Datei auch als Library mit korrektem Package Name <<eingebunden, sie wird aber nicht von Apache Netbeans 16 gefunden, obwohl alle Klassen unter <<<org.jDesktop.beansbinding. im Library Ordner zu sehen sind.
<<<ich habe unter Eigenschaften es an mehreren stellen probiert: Class path, Module vor allem schien mir <<<<"Compiled code" sinnvoll zu sein.
Ich hatte stundenlang mehrere Möglichkeiten ausprobiert - leider nicht systematisch und
1) die Datei variiert (sources oder nicht) (Ich hätte gerade gedacht, dass die dann kompiliert werden können und das unter "class path für compiling sources" abgelegt...)
2) relativer oder absoluter Pfad..
3) Die jar -Datei unter compiled sources - also unter dem Reiter "Run - Class path" glaube ich.
4) Kenne mich wenig mit der Annotation - / ANT - Anwendung aus...
5) von den Modulen hatte ich noch nie gehört und werde mir die wohl mal ansehen müssen...
Aber vermutlich habe ich tatsächlich kaum die einfachste Möglichkeit - den Class Path - ausprobiert und wenn wahrscheinlich mit der falschen Datei. Angesichts der unübersichtlichen Lage konnte ich auch nur vermuten, dass ich einfach nicht die richtige Datei am richtigen Ort abgelegt hatte. Ich dachte, das wäre aber irgendwie rübergekommen. Ich hätte gerne ein Bild hochgeladen, das hätte aber auch nur eine meiner ausprobierten Möglichkeiten zeigen können.
Leider hatte ich keine Möglichkeit für das normale Hochladen eines Bildes vom Rechner gefunden, was ich höchst bedauerlich fand, nur für den Media-Upload von Internetservern. Ich habe aber keinerlei Konten auf irgendwelchen Ablageservern im Internet wie Youtube, Clouds, Dropbox etc. Vermutlich wäre es unter diesen Umstanden sinnvoll, sich von diesen eine sinnvolle Gratislösung herauszusuchen. Aber das ist natürlich alles auch mit Zeitaufwand verbunden, den ich momentan gering halten muss. Vielen Dank noch einmal für die Lösung und die zusätzlichen Erklärungen.
Ich habe häufig solche Probleme, wo ich großen Infobedarf habe und nicht weiterkomme und dann viel Zeit brauche, die ich nicht habe. 1) Wie löst ihr solche Probleme effizienter? - außer auf einem Forum zu fragen, was ja auch nicht immer so toll klappt wie in diesem Fall.
2) In welcher Beziehung steht das PlugIn - org-netbeans-modules-form-binding11.nbm zu dem Beansbinding, Weiß jemand wozu das dient relativ zur Beansbinding-Klassen?
2) Hat noch jemand eine genauso einschlagende Lösung bzw. die passende jar-Datei für die org.netbeans.api.* und org.netbeans.mdodules.* Klassen?
Nochmals - und schon einmal im voraus - vielen Dank...
 

mihe7

Top Contributor
Leider hatte ich keine Möglichkeit für das normale Hochladen eines Bildes vom Rechner gefunden, was ich höchst bedauerlich fand, nur für den Media-Upload von Internetservern.
Hier im Editor einfach das Bild über die Zwischenablage einfügen oder, wenn Du es als Datei vorliegen hast, den Button links neben dem Smiley in der Toolbar anklicken (zumindest im FF funktioniert auch Strg+P, wenn Du im Editor bist). Ach, und Datei reinziehen geht natürlich auch.

In welcher Beziehung steht das PlugIn - org-netbeans-modules-form-binding11.nbm zu dem Beansbinding, Weiß jemand wozu das dient relativ zur Beansbinding-Klassen?
Das ist eine Implementierung des NetBeans Binding SPI für den Form-Editor auf Basis von org.jdesktop.beansbinding und org.jdesktop.swingbinding.
2) Hat noch jemand eine genauso einschlagende Lösung bzw. die passende jar-Datei für die org.netbeans.api.* und org.netbeans.mdodules.* Klassen?
Die NetBeans API ist riesig und in zig Module (NetBeans Module, keine Java Module) unterteilt. Da müsstest Du bei den Paketnamen schon genauer werden. Dazu aber noch eine Frage: wozu brauchst Du die NetBeans-Klassen? Ist das eine NetBeans Platform Anwendung?
 

Thommy7571

Mitglied
Vielen Dank schon einmal für die Antworten. Ich habe noch nach der Klasse mit den Fehlern wegen der Netbeans.API gesucht, finde sie aber erst einmal nicht.. Bei Gelegenheit schaue ich noch einmal nach und melde mich. Vielleicht reicht es auch sie zu löschen, weil sie jetzt irgendwo in Apache Netbeans verfügbar sind.
 

Thommy7571

Mitglied
Ich habe den Code gefunden:, der nicht läuft. Die Beansbinding.jar ist korrekt eingebunden. Ich habe umgestellt auf Java 11, vorher war es Java 8. Auskommentieren führt nicht zum Vorschlag neuerer Bibliotheken... Was könnte noch das Problem lösen? Wäre dankbar für jede Hilfe,,,

public List<BindingDescriptor>[] getBindingDescriptors(TypeHelper type) {
List<BindingDescriptor> typesFromSource = Collections.emptyList();
Class binarySuperClass = null;
if (type.getType() == null) {
FileObject fileInProject = FormEditor.getFormDataObject(formModel).getPrimaryFile();
ClassPath cp = ClassPath.getClassPath(fileInProject, ClassPath.SOURCE);
final List<BindingDescriptor> types = new LinkedList<BindingDescriptor>();
 

Anhänge

  • NetbeansBibliotheken.JPG
    NetbeansBibliotheken.JPG
    103,8 KB · Aufrufe: 2

Thommy7571

Mitglied
Ich bin nicht sicher Dich zu verstehen. Was meinst Du ? Ich habe vor kurzem den ganzen Netbeans2 Cache gelöscht, aber der Fehler trat schon vorher auf.
 

Thommy7571

Mitglied
eigentlich nicht... Es sollte nur ein Beispielprojket für Beansbinding sein. Ich hatte aber mal ein Modul installiert. Sollte aber nicht im Projekt sein.
 

mihe7

Top Contributor
eigentlich nicht... Es sollte nur ein Beispielprojket für Beansbinding sein. Ich hatte aber mal ein Modul installiert. Sollte aber nicht im Projekt sein.
Der Code importiert haufenweise Pakete der NetBeans Platform, der NetBeans IDE... darum frage ich.

Für "nur Beansbinding" brauchst Du nur die beans-binding-Jar. Alles, was NetBeans betrifft, müsste dann aus dem Code raus.
 

Thommy7571

Mitglied
Ich hatte gesehen, dass da speziell z.B.eine Klasse MetaBinding etc. sich darin befindet. Sind diese Klassen denn überflüssig? Du sprachst von NetBeans Modulen. Könntest DU noch einmal kurz erklären, wozu also diese ganzen Klassen notwendig sind in diesem Projekt?
 

mihe7

Top Contributor
Ob die Klassen überflüssig sind, kann ich Dir nicht sagen, ich kenne das Projekt ja nicht (in dem Beispielprojekt sind sie völlig überflüssig, das ganze Projekt macht rein gar nichts). Es scheint, als hättest Du Quellcode der NetBeans IDE in das Projekt kopiert -> unsinnig.

Allmählich geht mir ein Licht auf: in früheren Versionen von NetBeans konnte man im GUI-Editor das Binding durchführen, seit Apache geht das standardmäßig nicht mehr (aus Lizenzgründen). Den Teil gibts es zwar als Plugin (https://github.com/GrolarDan/nb-apache-form-binding), der Code scheint mir aber nicht mehr kompatibel zur aktuellen Version von NetBeans zu sein. S. auch https://github.com/GrolarDan/nb-apache-form-binding/issues/4

Kurz: die Funktionalität in der IDE gibt es nicht mehr, sie wiederherzustellen ist, wenn überhaupt, nur mit etwas Aufwand möglich.

Um bestehende Projekte auszuführen, solltest Du das Plugin aber nicht benötigen. Hier sollte die beansbinding-Jar genügen.
 

Thommy7571

Mitglied
Ok dann ist alles klar. Das ist das einzige Projekt wo ich dieses Problem habe und nicht verstand warum. Früher war es ja möglich, die GUI auch direkt zu erstellen, nicht nur über Code. Scheint heute nicht mehr zu gehen. In der Tat hat das Plug-in auch nicht geholfen, ich hatte das schon einmal installiert. Ansonsten funktioniert Beansbilding jetzt bei mir. Dann hat sich das Thema erledigt.
 

Oben