Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-Applet到可执行Jar包装_Java_Swing_Applet_Jframe_Jpanel - Fatal编程技术网

Java-Applet到可执行Jar包装

Java-Applet到可执行Jar包装,java,swing,applet,jframe,jpanel,Java,Swing,Applet,Jframe,Jpanel,我已经编写了一个Java XML解析器作为小程序。在这种形式下,它的外观和功能都很好 我的问题是,如果我想在没有浏览器的情况下运行它,我应该如何正确地包装它以可执行文件的形式运行 GUI.java -------------- import java.applet.*; import java.awt.*; import java.awt.event.*; import javax.swing.JFrame; import javax.swing.JPanel; import javax

我已经编写了一个Java XML解析器作为小程序。在这种形式下,它的外观和功能都很好

我的问题是,如果我想在没有浏览器的情况下运行它,我应该如何正确地包装它以可执行文件的形式运行

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;
}
在尝试使用Swing和JFRame等工具时,我没有得到正确的布局,或者打开了多个窗口。有人能提供帮助吗?第二个面板不断替换第一个面板。我想学习如何在一个可执行的jar中放置多个组件,这是我的目标

SwingPaintDemo.java
JFrame
默认使用
BorderLayout
,其中作为
JPanel
使用
FlowLayout

不必在
JFrame
中重建UI,只需向其添加
GUI
的实例,因为您已经在
JPanel
中定义了功能,这使其易于重用

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);

    }
}
仅供参考:在任何路径元素中都不应引用
src
src
在程序构建和打包后将不存在。对于小程序来说,这也是一个双重问题,因为小程序运行在严格的安全模型中,默认情况下会阻止它们访问文件系统

相反,您应该根据需要使用
Class#getResource
Class#getresourceastream

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

比如说。您可能需要更改
Parser
以接受
URL
和/或
InputStream
以及此
C:\\Users\\Administrator\\workspace\\XMLParser\\src\\test.xml
是个坏主意,您不应该在任何路径中引用
src
,因为一旦程序构建和打包,它就不存在了。相反,您应该使用类似于
Class#getResource
,它将返回
URL
Class#getresourceastream
,它将
InputStream
返回到资源感谢,这是有效的,快速的问题,我如何更好地控制布局它们都在同一行上,不低于对方。另外,我还不确定如何从另一个人那里获得xml文件的名称。我还不确定该文件的集成点,但是.getResource是一般的标准最佳实践吗?这是一个问题,您可以先看一下。在您的情况下,我很想使用
GridBagLayout
,但它是JSE中最复杂但最灵活的布局管理器
this.setXmlEditor(new Parser(getClass().getResource("/test.xml")));