StringDistance.java Source code

Java tutorial

Introduction

Here is the source code for StringDistance.java

Source

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

//Perl file: StringDistance.pl
/*
#! /usr/bin/perl
# Perl main program acting as a stub for callbacks from Java
    
use strict;
use warnings;
    
# 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.
 * <br/>
 * 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;
    }

}