Re: Sending Objects from Java - Mathematica

*To*: mathgroup at smc.vnet.net*Subject*: [mg91048] Re: Sending Objects from Java - Mathematica*From*: David Bailey <dave at Remove_Thisdbailey.co.uk>*Date*: Mon, 4 Aug 2008 03:26:10 -0400 (EDT)*References*: <g670pq$s5q$1@smc.vnet.net>

Jochen Adamek wrote: > Dear Mathematica-experts, > > i have written a Java-code, where i want to send some objects to > Mathematica. To call a function(written in Mathematica) with four > parameters under Java, i need to send objects to Mathematica. > > This is my Java-code: > > > public void sendListOfEdgesToMathematica(List<String> edg) throws > MathLinkException { > try { > > ml = MathLinkFactory.createKernelLink(argv); > } catch (MathLinkException e) { > System.out.println("Fatal error opening link: " + > e.getMessage()); > return; > } > > try { > ml.enableObjectReferences(); > ml.discardAnswer(); > ml.evaluate("<<C:\\Java\\AGG_Engine_Mathematica\\examples.nb"); > ml.discardAnswer(); > ml.putFunction("EvaluatePacket", 1); > ml.putFunction("doGetEdges", 1); > ml.put(edg); > ml.endPacket();.............. > > edg( a list) contains the element "e11" and i have written a Function > under Mathematica for receiving the object from Java: > > > doGetEdges[edg_] := > JavaBlock[Module[{outStream}, outStream = edg@getOutputStream[]; > outStream@print["Edges"]; > edgesG6 = edg > ] > ] > > The problem is, Mathematica does not receive the correct value("e11"). > I tried to test my implementation with a PacketListener, but without > success. After sending four objects to Mathematica, i want to call the > Mathematica-function under Java: > > "objectGraph[edgesG6, verticesG6, sourcesG6, targetsG6]" > > Any help would be fantastic. > > Best regards J.Adamek > Unless you really need to work at such a low level, it is much easier to call StdLink.getLink().evaluateToInputForm(str,0); Where str is a string representation of the Mathematica function call you want to make. As for your code, I would need to be able to debug it to be sure, but I think the problem is that you need to explicitly generate the list using: ml.putFunction("List", 1); (followed by the 1 element of your list) David Bailey http://www.dbaileyconsultancy.co.uk