1

Possible Duplicate:
How can I convert my Java program to an .exe file?

I have a query that I have developed the below java calculator, in order to execute I can run this application on eclipse but I want to create it an executable file of it so that I can create a shortcut of it by mapping the shortcut with exe file and when I click on icon the calculator application get executed , below is the java code please advise..

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.KeyStroke;

public class Calculator extends JFrame implements ActionListener{
    // Variables
    final int MAX_INPUT_LENGTH = 20;
    final int INPUT_MODE = 0;
    final int RESULT_MODE = 1;
    final int ERROR_MODE = 2;
    int displayMode;

    boolean clearOnNextDigit, percent;
    double lastNumber;
    String lastOperator;

    private JMenu jmenuFile, jmenuHelp;
    private JMenuItem jmenuitemExit, jmenuitemAbout;

    private JLabel jlbOutput;
    private JButton jbnButtons[];
    private JPanel jplMaster, jplBackSpace, jplControl;

    /*
     * Font(String name, int style, int size)
      Creates a new Font from the specified name, style and point size.
     */

    Font f12 = new Font("Times New Roman", 0, 12);
    Font f121 = new Font("Times New Roman", 1, 12);

    // Constructor 
    public Calculator() 
    {
        /* Set Up the JMenuBar.
         * Have Provided All JMenu's with Mnemonics
         * Have Provided some JMenuItem components with Keyboard Accelerators
         */ 

        jmenuFile = new JMenu("File");
        jmenuFile.setFont(f121);
        jmenuFile.setMnemonic(KeyEvent.VK_F);

        jmenuitemExit = new JMenuItem("Exit");
        jmenuitemExit.setFont(f12);
        jmenuitemExit.setAccelerator(KeyStroke.getKeyStroke( KeyEvent.VK_X, 
                                ActionEvent.CTRL_MASK));
        jmenuFile.add(jmenuitemExit);

        jmenuHelp = new JMenu("Help");
        jmenuHelp.setFont(f121);
        jmenuHelp.setMnemonic(KeyEvent.VK_H);

        jmenuitemAbout = new JMenuItem("About POS Calculator");
        jmenuitemAbout.setFont(f12);
        jmenuHelp.add(jmenuitemAbout);

        JMenuBar mb = new JMenuBar();
        mb.add(jmenuFile);
        mb.add(jmenuHelp);
        setJMenuBar(mb);

        //Set frame layout manager

        setBackground(Color.darkGray);

        jplMaster = new JPanel();

        jlbOutput = new JLabel("0");
        jlbOutput.setHorizontalTextPosition(JLabel.RIGHT);
        jlbOutput.setBackground(Color.WHITE);
        jlbOutput.setOpaque(true);

        // Add components to frame
        getContentPane().add(jlbOutput, BorderLayout.NORTH);

        jbnButtons = new JButton[23];
//      GridLayout(int rows, int cols, int hgap, int vgap) 

        JPanel jplButtons = new JPanel();       // container for Jbuttons

        // Create numeric Jbuttons
        for (int i=0; i<=9; i++)
        {
            // set each Jbutton label to the value of index
            jbnButtons[i] = new JButton(String.valueOf(i));
        }

        // Create operator Jbuttons
        jbnButtons[10] = new JButton("+/-");
        jbnButtons[11] = new JButton(".");
        jbnButtons[12] = new JButton("=");
        jbnButtons[13] = new JButton("/");
        jbnButtons[14] = new JButton("*");
        jbnButtons[15] = new JButton("-");
        jbnButtons[16] = new JButton("+");
        jbnButtons[17] = new JButton("sqrt");
        jbnButtons[18] = new JButton("1/x");
        jbnButtons[19] = new JButton("%");

        jplBackSpace = new JPanel();
        jplBackSpace.setLayout(new GridLayout(1, 1, 2, 2));

        jbnButtons[20] = new JButton("Backspace");
        jplBackSpace.add(jbnButtons[20]);

        jplControl = new JPanel();
        jplControl.setLayout(new GridLayout(1, 2, 2 ,2));

        jbnButtons[21] = new JButton(" CE ");
        jbnButtons[22] = new JButton("C");

        jplControl.add(jbnButtons[21]);
        jplControl.add(jbnButtons[22]);

//      Setting all Numbered JButton's to Blue. The rest to Red
        for (int i=0; i<jbnButtons.length; i++) {
            jbnButtons[i].setFont(f12);

            if (i<10)
                jbnButtons[i].setForeground(Color.black);

            else
                jbnButtons[i].setForeground(Color.RED);
        }

        // Set panel layout manager for a 4 by 5 grid
        jplButtons.setLayout(new GridLayout(4, 5, 2, 2));

        //Add buttons to keypad panel starting at top left
        // First row
        for(int i=7; i<=9; i++)     {
            jplButtons.add(jbnButtons[i]);
        }

        // add button / and sqrt
        jplButtons.add(jbnButtons[13]);
        jplButtons.add(jbnButtons[17]);

        // Second row
        for(int i=4; i<=6; i++)
        {
            jplButtons.add(jbnButtons[i]);
        }

        // add button * and x^2
        jplButtons.add(jbnButtons[14]);
        jplButtons.add(jbnButtons[18]);

        // Third row
        for( int i=1; i<=3; i++)
        {
            jplButtons.add(jbnButtons[i]);
        }

        //adds button - and %
        jplButtons.add(jbnButtons[15]);
        jplButtons.add(jbnButtons[19]);

        //Fourth Row
        // add 0, +/-, ., +, and =
        jplButtons.add(jbnButtons[0]);
        jplButtons.add(jbnButtons[10]);
        jplButtons.add(jbnButtons[11]);
        jplButtons.add(jbnButtons[16]);
        jplButtons.add(jbnButtons[12]);

        jplMaster.setLayout(new BorderLayout());
        jplMaster.add(jplBackSpace, BorderLayout.WEST);
        jplMaster.add(jplControl, BorderLayout.EAST);
        jplMaster.add(jplButtons, BorderLayout.SOUTH);

        // Add components to frame
        getContentPane().add(jplMaster, BorderLayout.SOUTH);
        requestFocus();

        //activate ActionListener
        for (int i=0; i<jbnButtons.length; i++){
            jbnButtons[i].addActionListener(this);
        }

        jmenuitemAbout.addActionListener(this);
        jmenuitemExit.addActionListener(this);

        clearAll();

        //add WindowListener for closing frame and ending program
        addWindowListener(new WindowAdapter() {

                public void windowClosed(WindowEvent e)
                {
                    System.exit(0);
                }
            }
        );
    }   //End of Contructor Calculator

    // Perform action
    public void actionPerformed(ActionEvent e){
        double result = 0;

        if(e.getSource() == jmenuitemAbout){
          JDialog dlgAbout = new CustomABOUTDialog(this, 
                                "About POS Calculator", true);
            dlgAbout.setVisible(true);
        }else if(e.getSource() == jmenuitemExit){
            System.exit(0);
        }   

        // Search for the button pressed until end of array or key found
        for (int i=0; i<jbnButtons.length; i++)
        {
            if(e.getSource() == jbnButtons[i])
            {
                switch(i)
                {
                    case 0:
                        addDigitToDisplay(i);
                        break;

                    case 1:
                        addDigitToDisplay(i);
                        break;

                    case 2:
                        addDigitToDisplay(i);
                        break;

                    case 3:
                        addDigitToDisplay(i);
                        break;

                    case 4:
                        addDigitToDisplay(i);
                        break;

                    case 5:
                        addDigitToDisplay(i);
                        break;

                    case 6:
                        addDigitToDisplay(i);
                        break;

                    case 7:
                        addDigitToDisplay(i);
                        break;

                    case 8:
                        addDigitToDisplay(i);
                        break;

                    case 9:
                        addDigitToDisplay(i);
                        break;

                    case 10:    // +/-
                        processSignChange();
                        break;

                    case 11:    // decimal point
                        addDecimalPoint();
                        break;

                    case 12:    // =
                        processEquals();
                        break;

                    case 13:    // divide
                        processOperator("/");
                        break;

                    case 14:    // *
                        processOperator("*");
                        break;

                    case 15:    // -
                        processOperator("-");
                        break;

                    case 16:    // +
                        processOperator("+");
                        break;

                    case 17:    // sqrt
                        if (displayMode != ERROR_MODE)
                        {
                           try
                            {
                                if (getDisplayString().indexOf("-") == 0)
                                    displayError("Invalid input for function!");

                                result = Math.sqrt(getNumberInDisplay());
                                displayResult(result);
                            }

                            catch(Exception ex)
                            {
                                displayError("Invalid input for function!");
                                displayMode = ERROR_MODE;
                            }
                        }
                        break;

                    case 18:    // 1/x
                        if (displayMode != ERROR_MODE){
                            try
                            {
                                if (getNumberInDisplay() == 0)
                                    displayError("Cannot divide by zero!");

                                result = 1 / getNumberInDisplay();
                                displayResult(result);
                            }

                            catch(Exception ex) {
                                displayError("Cannot divide by zero!");
                                displayMode = ERROR_MODE;
                            }
                        }
                        break;

                    case 19:    // %
                        if (displayMode != ERROR_MODE){
                            try {
                                result = getNumberInDisplay() / 100;
                                displayResult(result);
                            }

                            catch(Exception ex) {
                                displayError("Invalid input for function!");
                                displayMode = ERROR_MODE;
                            }
                        }
                        break;

                    case 20:    // backspace
                        if (displayMode != ERROR_MODE){
                            setDisplayString(getDisplayString().substring(0,
                                      getDisplayString().length() - 1));

                            if (getDisplayString().length() < 1)
                                setDisplayString("0");
                        }
                        break;

                    case 21:    // CE
                        clearExisting();
                        break;

                    case 22:    // C
                        clearAll();
                        break;
                }
            }
        }
    }

    void setDisplayString(String s){
        jlbOutput.setText(s);
    }

    String getDisplayString (){
        return jlbOutput.getText();
    }

    void addDigitToDisplay(int digit){
        if (clearOnNextDigit)
            setDisplayString("");

        String inputString = getDisplayString();

        if (inputString.indexOf("0") == 0){
            inputString = inputString.substring(1);
        }

        if ((!inputString.equals("0") || digit > 0)  
                            && inputString.length() < MAX_INPUT_LENGTH){
            setDisplayString(inputString + digit);
        }


        displayMode = INPUT_MODE;
        clearOnNextDigit = false;
    }

    void addDecimalPoint(){
        displayMode = INPUT_MODE;

        if (clearOnNextDigit)
            setDisplayString("");

        String inputString = getDisplayString();

        // If the input string already contains a decimal point, don't
        //  do anything to it.
        if (inputString.indexOf(".") < 0)
            setDisplayString(new String(inputString + "."));
    }

    void processSignChange(){
        if (displayMode == INPUT_MODE)
        {
            String input = getDisplayString();

            if (input.length() > 0 && !input.equals("0"))
            {
                if (input.indexOf("-") == 0)
                    setDisplayString(input.substring(1));

                else
                    setDisplayString("-" + input);
            }

        }

        else if (displayMode == RESULT_MODE)
        {
            double numberInDisplay = getNumberInDisplay();

            if (numberInDisplay != 0)
                displayResult(-numberInDisplay);
        }
    }

    void clearAll() {
        setDisplayString("0");
        lastOperator = "0";
        lastNumber = 0;
        displayMode = INPUT_MODE;
        clearOnNextDigit = true;
    }

    void clearExisting(){
        setDisplayString("0");
        clearOnNextDigit = true;
        displayMode = INPUT_MODE;
    }

    double getNumberInDisplay() {
        String input = jlbOutput.getText();
        return Double.parseDouble(input);
    }

    void processOperator(String op) {
        if (displayMode != ERROR_MODE)
        {
            double numberInDisplay = getNumberInDisplay();

            if (!lastOperator.equals("0"))  
            {
                try
                {
                    double result = processLastOperator();
                    displayResult(result);
                    lastNumber = result;
                }

                catch (DivideByZeroException e)
                {
                }
            }

            else
            {
                lastNumber = numberInDisplay;
            }

            clearOnNextDigit = true;
            lastOperator = op;
        }
    }

    void processEquals(){
        double result = 0;

        if (displayMode != ERROR_MODE){
            try         
            {
                result = processLastOperator();
                displayResult(result);
            }

            catch (DivideByZeroException e) {
                displayError("Cannot divide by zero!");
            }

            lastOperator = "0";
        }
    }

    double processLastOperator() throws DivideByZeroException {
        double result = 0;
        double numberInDisplay = getNumberInDisplay();

        if (lastOperator.equals("/"))
        {
            if (numberInDisplay == 0)
                throw (new DivideByZeroException());

            result = lastNumber / numberInDisplay;
        }

        if (lastOperator.equals("*"))
            result = lastNumber * numberInDisplay;

        if (lastOperator.equals("-"))
            result = lastNumber - numberInDisplay;

        if (lastOperator.equals("+"))
            result = lastNumber + numberInDisplay;

        return result;
    }

    void displayResult(double result){
        setDisplayString(Double.toString(result));
        lastNumber = result;
        displayMode = RESULT_MODE;
        clearOnNextDigit = true;
    }

    void displayError(String errorMessage){
        setDisplayString(errorMessage);
        lastNumber = 0;
        displayMode = ERROR_MODE;
        clearOnNextDigit = true;
    }

    public static void main(String args[]) {
        Calculator calci = new Calculator();
        Container contentPane = calci.getContentPane();
//      contentPane.setLayout(new BorderLayout());
        calci.setTitle("POS Calculator");
        //calci.setSize(241, 217); SARAL
        calci.setSize(541, 517);
        calci.pack();
        calci.setLocation(400, 250);
        calci.setVisible(true);
        calci.setResizable(false);
    }

}       //End of Swing Calculator Class.

class DivideByZeroException extends Exception{
    public DivideByZeroException()
    {
        super();
    }

    public DivideByZeroException(String s)
    {
        super(s);
    }
}

class CustomABOUTDialog extends JDialog implements ActionListener {
    JButton jbnOk;

    CustomABOUTDialog(JFrame parent, String title, boolean modal){
        super(parent, title, modal);
        setBackground(Color.black);

        JPanel p1 = new JPanel(new FlowLayout(FlowLayout.CENTER));

        StringBuffer text = new StringBuffer();
        text.append("POS Calculator \n\n");
        text.append("Developer: KnightRiders\n");
        text.append("Release:   9.0");

        JTextArea jtAreaAbout = new JTextArea(6, 23);
        jtAreaAbout.setText(text.toString());
        jtAreaAbout.setFont(new Font("Times New Roman", 1, 13));
        jtAreaAbout.setEditable(false);

        p1.add(jtAreaAbout);
        p1.setBackground(Color.red);
        getContentPane().add(p1, BorderLayout.CENTER);

        JPanel p2 = new JPanel(new FlowLayout(FlowLayout.CENTER));
        jbnOk = new JButton(" OK ");
        jbnOk.addActionListener(this);

        p2.add(jbnOk);
        getContentPane().add(p2, BorderLayout.SOUTH);

        setLocation(408, 270);
        setResizable(false);

        addWindowListener(new WindowAdapter() {
                public void windowClosing(WindowEvent e)
                {
                    Window aboutDialog = e.getWindow();
                    aboutDialog.dispose();
                }
            }
        );

        pack();
    }

    public void actionPerformed(ActionEvent e)
    {
        if(e.getSource() == jbnOk)  {
            this.dispose();
        }
    }

}
Community
  • 1
  • 1
user1633823
  • 347
  • 2
  • 5
  • 14

3 Answers3

4

Since it is a Swing based desktop application, a great way to deploy it is direct from a link using Java Web Start.

Java Web Start (JWS) is the Oracle Corporation technology used to launch rich client (Swing, AWT, SWT) desktop applications directly from a network or internet link. It offers 'one click' installation for platforms that support Java.

JWS provides many appealing features including, but not limited to, splash screens, desktop integration,1 file associations, automatic update (including lazy downloads and programmatic control of updates), partitioning of natives & other resource downloads by platform, architecture or Java version, configuration of run-time environment (minimum J2SE version, run-time options, RAM etc.), easy management of common resources using extensions..

Of course, JWS is intended for deploying apps. to Windows, OS X & *nix, rather than just Windows (for a .exe).

  1. Both desktop shortcuts and a menu item (with icons) can be specified for an application. In later JREs, there is also the IntegrationService. An API to install shortcuts (and file associations).
Community
  • 1
  • 1
Andrew Thompson
  • 168,117
  • 40
  • 217
  • 433
3

You can create a runnable jar in Eclipse (under File/Export) or use a tool like launch4j

Jim Garrison
  • 85,615
  • 20
  • 155
  • 190
2

Java isn't something you normally convert to an exe file, you have to convert it into a "JAR" or java archive, and this is actually better than distributing an exe file, because it doesn't restrict the platform that it can run on.

It's actually pretty easy to do in Eclipse.

I don't know what version of eclipse you're using, but you can right click the project and look for the Export option. And then you can select "JAR File" in one of those options.

Good luck and have fun!

alvonellos
  • 1,009
  • 1
  • 9
  • 27