Beefy Boxes and Bandwidth Generously Provided by pair Networks
XP is just a number
 
PerlMonks  

Re^2: Inline::Java Question

by wpflum (Initiate)
on Feb 03, 2012 at 17:30 UTC ( #951686=note: print w/ replies, xml ) Need Help??


in reply to Re: Inline::Java Question
in thread Inline::Java Question

Your code itself didn't help but it showed me that I needed to look into the INLINE parts first so I dug into the INLINE help and pretty much got the interface working. I am having another problem though, I need to use a java IMAGE object in the code I'm writing. What I need to do is read in an image file and pass it to the java driver. To do this when I couldn't figure out the actual format of the IMAGE object I wrote a small java class than imported the java IMAGE handling routines and let me get the IMAGE object in return for giving it the filename. I made sure this worked by dropping it into the original java test program given to me by the hardware company and the concept works just like it should. Now I used INLINE Java to use the class I made to read in the image file into a variable but when I try to send the variable to the java class that handles the hardware interface I'm getting the following error.

main::java::lang::IllegalArgumentException=HASH(0x9a82f58)

I'm guessing that something doesn't like the format being returned from the class to read the file but I'm not sure what I can do to force this to work. Any Ideas?


Comment on Re^2: Inline::Java Question
Re^3: Inline::Java Question
by wpflum (Initiate) on Feb 03, 2012 at 20:19 UTC
    I was able to drop the external class I made to interface to the awt class in java but I still get an error when it tries to send the image object to the java class to load it. I can actually print the object $image and I get InLine::Java::Object=HASH(0x94da3a8) Here is the code:
    #!/usr/bin/perl use strict; use warnings; use Inline (Java => 'STUDY', CLASSPATH => '/usr/share/java/RXTXcomm.jar:/home/billp/Deskt +op/perl/SigPlus2_57.jar:/home/billp/Desktop/perl/rt.jar', STUDY => ['com.topaz.sigplus.SigPlus','java.awt.Image'], AUTOSTUDY =>1); use Inline Java => <<EOJ; import java.awt.*; public class ADMLibrary{ public Image GetJavaImageObject(String Filename) { return Toolkit.getDefaultToolkit().getImage(Filename); } } EOJ my $filename = "/home/billp/Desktop/perl/Screen2.jpg"; my $adm = new ADMLibrary(); my $image = $adm->GetJavaImageObject($filename); my $sigobj = new com::topaz::sigplus::SigPlus(); $sigobj->lcdWriteImage(0, 2, 3, 46, 233, 24, $image); 1;
    Any Suggestions??

      My general advice when using Inline is to keep data passed between Perl and the other language as simple as possible. Passing a Perl object to a Java object as a method parameter is doable, but seems advisable. I tried to make sure I was only passing strings through to Java.

      Clearly some Java classes expect more complex data structures to be passed to them - but you write wrappers for those, and do (for example) JSON encoding/decoding at each end.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://951686]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others rifling through the Monastery: (7)
As of 2014-09-20 09:05 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    How do you remember the number of days in each month?











    Results (157 votes), past polls