Für die Datenbanksoftware Filemaker Pro gibt es ein Plugin, das eine
Schnittstelle bereitstellt, so dass man eigene Funktionen in "Groovy"
verfassen kann. Groovy stammt von Apache und soll zum überwiegenden Teil
mit Java komaptibel sein. Mein ersten Versuche werfen allerdings eine
Fehlermeldung (s. Bild) , die mich fast wahnsinnig macht, weil ich sie
nicht verstehe. Vlt. könnte mal jmd. einen Blick darüber werfen? Danke.
Die Funktion RegisterGroovy "außenrum" gehört zu Filemaker und
deklariert diesem gegenüber die selbstverfasste Methode. Der restliche
Java-Code beruht auf einem Beispiel für einen QR-Code-Generator auf
Basis des ZXing-Projektes. In Eclipse mit "richtigem" Java läuft das
problemlos ...
1
RegisterGroovy("get_qrcode(text;s)" ;
2
"
3
import java.awt.image.BufferedImage;
4
import com.google.zxing.BarcodeFormat;
5
import com.google.zxing.common.BitMatrix;
6
import com.google.zxing.qrcode.QRCodeWriter;
7
8
public BufferedImage getQR(String t,int size) throws Exception{
groovy =/= Java
Du kannst nicht javacode in einer groovy umgebung schreiben und erwarten
dass es pauschal funktioniert.
auch wenn die Syntax sehr ähnlich ist
(und damit eine 'flache Lernkurve' ür Java Entwickler bietet, ist es
eben noch lange kein JAVA!)
Und ja ich weiss, dutzende von java imports geschehen automatisch.
Heisst aber eben nicht zwingend das googles zebraCrossing mit groovy
kompatibel ist.
(ich weiss es nicht, ich nutze groovy nicht selber)
ich empfehle da mal
https://groovy-lang.org/differences.html
als Lektüre.
kann sein, dass zebracrossing zB arrays in java shorthand initialisiert,
was in groovy schlicht nicht funktioniert.
müssteste mal reinsehen im Zweifel.
soweit ich das erkenne beschwert sich die Fehlermeldung über
den MatrixToImageWriter (der ist ja Teil von zxing nicht wahr?)
Ich empfehle übrigens, Java-syntax in groovy zu 'vermeiden'
zb ist das letzte 'return' einer Funktion in groovy optional
ebenso semikolons sie sind IMMER optional
etc..
am besten Du liest dich mal kurz durch den style guide:
https://groovy-lang.org/style-guide.html
Empfehle ich deswegen,
weil Du so code-snippets anhand der Syntax unterscheiden kannst
falls Du sie auslagerst und weiter/wieder-verwenden willst.
Das erspart Dir nämlich grovvy-spezifischen Code in Java und
Andersherum.
eben für die Fälle wo die zwei mal grade NICHT kompatibel sind.
Aber das nur als gut gemeinter Rat (funktioniert ja mit semikolons und
return auch ;))
'sid
sid schrieb:> Heisst aber eben nicht zwingend das googles zebraCrossing mit groovy> kompatibel ist.> (ich weiss es nicht, ich nutze groovy nicht selber)> ich empfehle da mal> https://groovy-lang.org/differences.html> als Lektüre.> kann sein, dass zebracrossing zB arrays in java shorthand initialisiert,> was in groovy schlicht nicht funktioniert.
Das halte ich für unwahrscheinlich. Ich würde mal annehmen, dass java
code (in .java Dateien) als java code, und groovy code (in .groovy) als
groovy code kompiliert wird. Resultat ist jeweils java byte code in
.class files, und Dinge wie das Format der Funktionstabellen, Calling
Conventions, importieren anderer .class Files, etc. ist mit dem Format
der .class files klar definiert. Dort sind nicht nur Maschinencode
Instruktionen drin, und beim Kompilieren einer Quelldateien braucht es
die anderen importierten noch nicht, erst bei der Ausführung müssen alle
.class Files da sein. Und verschiedene Sprachen können das Zeug im
.class file auch nicht einfach anders machen, weil dann kann die JVM mit
dem zeug schlicht nichts mehr anfangen.
Von da her ist es eigentlich nicht möglich, dass eine Java Library
aufgrund von Syntaxunterscheiden zwischen groovie und java zu groovie
inkompatibel ist, denn auf der Ebene interagieren die Sprachen ja gar
nie.
Was das eigentliche Problem sein könnte, kann ich aber auch nicht sagen.
Hast du schon versucht, die getQR Funktion wegzulassen, und den Code
darin direkt ausführen zu lassen? Wer weiss, was RegisterGroovy mit dem
Code anstellt, vielleicht wrappt dass den Code schon in eine Methode?
🐧 DPA 🐧 schrieb:> Von da her ist es eigentlich nicht möglich, dass eine Java Library> aufgrund von Syntaxunterscheiden zwischen groovie und java zu groovie> inkompatibel ist
bist Du sicher? Ich weiss es nicht, wie gesagt ich nutze groovy nicht
wirklich;
da sich Java aber sowohl als compiletime als auch als runtime
kompilieren lässt (zwecks portabilität und so)
weiss ich nicht inwiefern sich ein classfile nicht eventuell doch als
"halbzeug" verhält also quasi unfertig daherkommt;
ich hab mich da ehrlich gesagt nie wirklich drum geschert
(bin jetzt auch schon nicht der grosse fan von Java muss ich gestehen)
Wie gesagt ich weiss es nicht,
würde aber -wegen besagter feiner Unterschiede- eben nicht pauschal
davon ausgehen,
dass alles was in Java funktioniert auch in groovy läuft
(sonst wär's ja auch irgendwie unnütz überhaupt zu unterscheiden ;))
JDF wie Frank schon richtig bemerkt hat ist der JAVA-code ansich okay.
das kompiliert und tut wie ihm geheissen,
und wenn ich das richtig gezählt habe klemmt er eben beim Aufruf von
MatrixToImageWriter;
das kann allerdings auch ne Unzulänglichkeit des Scriptmaster plugins
sein
der es als "einzeiler" liesst und sich dann irgendeine column der Zeile
ausdenkt #schulterzuck
Tut mir leid, ich fürchte ich kann also nicht wirklich helfen :(
'sid
sid schrieb:> bist Du sicher?
Ja
> Ich weiss es nicht, wie gesagt ich nutze groovy nicht wirklich;
Ich auch nicht.
> da sich Java aber sowohl als compiletime als auch als runtime> kompilieren lässt (zwecks portabilität und so)> weiss ich nicht inwiefern sich ein classfile nicht eventuell doch als> "halbzeug" verhält also quasi unfertig daherkommt;
Es gibt ne spec, da kann man es nachlesen:
https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html
Methoden, Interfaces, Felder, Konstanten, Datentypen, aber auch die
Opcodes der Instruktionen, etc. sind alle genau festgelegt, wie sie
binär repräsentiert werden. Da drin ist nichts Java- Groovie- etc.
spezifisches mehr drin.
🐧 DPA 🐧 schrieb:> Was das eigentliche Problem sein könnte, kann ich aber auch nicht sagen.> Hast du schon versucht, die getQR Funktion wegzulassen, und den Code> darin direkt ausführen zu lassen? Wer weiss, was RegisterGroovy mit dem> Code anstellt, vielleicht wrappt dass den Code schon in eine Methode?
Ja, das hab ich auch schon probiert, das führte zu einer anderen
Fehlermeldung ... kann ich erst heute abend reinstellen, bin z.Zt.
unterwegs, irgendwas mit "... missing property ..."
Durch das Kapseln verschwand diese Meldung.
Das ist doch schon mal ein Fortschritt, ein Runtime statt ein Compile
time Fehler. Es scheint als würde er MatrixToImageWriter nicht finden.
Versuch mal einen Import dazu zu tun, vermutlich:
🐧 DPA 🐧 schrieb:> Das ist doch schon mal ein Fortschritt, ein Runtime statt ein Compile> time Fehler. Es scheint als würde er MatrixToImageWriter nicht finden.> Versuch mal einen Import dazu zu tun, vermutlich:>
Uff. Super! Genau das wars. Mein Dank wird dir ewig nachschleichen :-)
Nornalerweise steht da in so einem Fall "not resolved ..." :-( aber gut,
einem geschenkten Barsch ... :-)