简体   繁体   中英

Java - Applet to Executable Jar Wrapping

I have written a Java XML Parser as an Applet. It is looking and functioning well enough in this form.

小程序

My Question, Is if I want to run this without a browser, how Would I properly wrap it to run as an executable?

GUI.java

--------------


import java.applet.*;
import java.awt.*;
import java.awt.event.*;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class GUI extends JPanel implements ActionListener 
{

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    private Parser xmlEditor;
    private String startTimeValue;
    private String endTimeValue;

    public GUI(){
        init();
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable(){
            @Override
            public void run() {
                new GUI();
            }
        });
    }
    public void init() {

        this.setXmlEditor(new Parser("C:\\Users\\Administrator\\workspace\\XMLParser\\src\\test.xml"));

        add(new Label("Start Time"));

        startTimeValue = xmlEditor.getStartTimeValue();
        endTimeValue = xmlEditor.getEndTimeValue();


        startTime = new TextField(startTimeValue);

        add(new Label("End Time"));
        endTime = new TextField(endTimeValue);

        save = new Button("save");
        save.addActionListener(this);


        add(startTime);
        add(endTime);
        add(save);

    }

    public void actionPerformed(ActionEvent e) 
    {

        System.out.println(endTime.getText());



        xmlEditor.updateStartTimeValue(startTime.getText());
        xmlEditor.updateEndTimeValue(endTime.getText());

        System.out.println(e);
        System.exit(0);



    }

    public Parser getXmlEditor() {
        return xmlEditor;
    }

    public void setXmlEditor(Parser xmlEditor) {
        this.xmlEditor = xmlEditor;
    }

    TextField startTime, endTime;
    Button save;
}

While trying things with Swing and JFRame etc, I am not getting properly layout, or am opening multiple windows. Can anyone provide assistance? The second Panel Keeps replacing the First. Id like to really try to learn how to place multiple components inside an executable jar is the goal.

SwingPaintDemo.java

import java.awt.Label;
import java.awt.TextField;

import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.JFrame;

public class SwingPaintDemo {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }

    private static void createAndShowGUI() {
        System.out.println("Created GUI on EDT? "+
                SwingUtilities.isEventDispatchThread());
        JFrame f = new JFrame("Test");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        f.setVisible(true);


        Parser myParser = new Parser("C:\\Users\\Administrator\\workspace\\XMLParser\\src\\test.xml");

        JPanel top = new JPanel();
        top.add(new Label("Start Time"));

        TextField startTimeField = new TextField(myParser.getStartTimeValue());
        top.add(startTimeField);
        f.getContentPane().add(top);

        JPanel bottom = new JPanel();
        bottom.add(new Label("End Time"));
        TextField endTimeField = new TextField(myParser.getEndTimeValue());
        bottom.add(endTimeField);
        f.getContentPane().add(bottom);



        f.pack();

    }
}

JFrame uses a BorderLayout by default, where as a JPanel uses a FlowLayout

Instead of rebuilding the UI in the JFrame , simply add an instance of GUI to it, since you've already defined the functionality in a JPanel , this makes it easily reusable.

public class SwingPaintDemo {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }

    private static void createAndShowGUI() {
        System.out.println("Created GUI on EDT? "+
                SwingUtilities.isEventDispatchThread());
        JFrame f = new JFrame("Test");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.getContentPane().add(new GUI());

        f.pack();
        f.setVisible(true);

    }
}

FYI: You should never reference src in any path element, src won't exist once the program is built and packaged. This is also doubly concerning for applets, as applets run in a tight security model, which prevents them from accessing the file system by default.

Instead, you should be using Class#getResource or Class#getResourceAsStream , depending on your needs.

this.setXmlEditor(new Parser(getClass().getResource("/test.xml")));

for example. You may need to change your Parser to accept either a URL and/or InputStream as well

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM