Java/Development Class/Perl

Материал из Java эксперт
Перейти к: навигация, поиск

Java Class that calls a Perl function

   <source lang="java">

/***************************************************************

Download the jar for org.perl.inline.java first
                                                                                                                                • /


//Perl file: StringDistance.pl /*

  1. ! /usr/bin/perl
  2. Perl main program acting as a stub for callbacks from Java

use strict; use warnings;

  1. all modules called from either Perl or from Java must go here:

use Text::Levenshtein qw(); use Inline "Java" => "STUDY", # glean interface from Java class file

          "AUTOSTUDY" => 1,              # glean more interfaces, too, just in case
          "STUDY" => ["StringDistance"], # name of our main Java class
          "CLASSPATH" => ".",            # needed in order to find main Java class
          ;

my $sd = StringDistance->new(\@ARGV); # construct instance of main Java class $sd->show(); # call routine to show it $sd->StartCallbackLoop(); # prepare to listen for threaded callbacks

  • /

/** Example of a Java Class that calls a Perl function.

* 
* Does not run on its own -- for usage, see StringDistance.pl! */

import javax.swing.*; import java.awt.*; import java.awt.event.*; import org.perl.inline.java.*; // requires classpath to include this file; usually something like // .;<perldir>/site/lib/Inline/Java/InlineJavaServer.jar /** The test class. */ public class StringDistance extends InlineJavaPerlCaller {

 JFrame frame;           // visual container
 JTextField tf[], dist;  // text input fields, result output field
 JButton go, exit;       // action buttons
 /* The constructor with possibly 2 initial strings */
 public StringDistance(String[] strs) throws InlineJavaException {
   frame = new JFrame("StringDistance");
   Container p = frame.getContentPane();
   p.setLayout(new GridLayout(0,2));
   // The input fields, including labels:
   tf = new JTextField[2];
   for (int i=0; i<2; i++) {
     p.add(new JLabel("String " + i + ":"));
     tf[i] = new JTextField(20);
     if ((strs != null) && (i < strs.length)) tf[i].setText(strs[i]);
     p.add(tf[i]);
   }
   // The output field, including label:
   p.add(new JLabel("Distance:"));
   dist = new JTextField(5);
   dist.setEditable(false);
   p.add(dist);
   // The main action button:
   go = new JButton("Compute distance");
   go.addActionListener(new ActionListener() {
              public void actionPerformed(ActionEvent ae) {
                dist.setText(Integer.toString(match(tf[0].getText(),
                                                    tf[1].getText())));
              }
            }
          );
   p.add(go);
   // To finish off:
   exit = new JButton("Exit");
   exit.addActionListener(new ActionListener() {
              public void actionPerformed(ActionEvent ae) {
                frame.dispose(); System.exit(0);
              }
            }
          );
   p.add(exit);
   if ((strs != null) && (strs.length > 1))
     dist.setText(Integer.toString(match(tf[0].getText(),
                  tf[1].getText())));
   frame.pack();
 }
 // Alternative constructors:
 public StringDistance(String s0, String s1)
     throws InlineJavaException {
   this(new String[] { s0, s1 });
 }
 public StringDistance(String s0) throws InlineJavaException {
   this(new String[] { s0 });
 }
 public StringDistance() throws InlineJavaException {
   this((String[])null);
 }
 /** This shows everything */
 public void show() { frame.setVisible(true); }
 /* Optionally for pre-filling the input fields. */
 public void setText(int fieldno, String str) {
   tf[fieldno].setText(str);
 }
 /** The central interface function to Perl. */
 public int match(String s0, String s1) {
   try {
     String str = (String)CallPerl("Text::Levenshtein", "distance",
                                   new Object [] {s0, s1});
     return Integer.parseInt(str);
   } catch (InlineJavaPerlException e) {
     System.err.println("Inline Java Perl Exception: " + e);
   } catch (InlineJavaException e) {
     System.err.println("Inline Java Exception: " + e);
   }
   return 0;
 }

}


      </source>