Java-Applet到可执行Jar包装
我已经编写了一个Java XML解析器作为小程序。在这种形式下,它的外观和功能都很好 我的问题是,如果我想在没有浏览器的情况下运行它,我应该如何正确地包装它以可执行文件的形式运行 GUI.javaJava-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
--------------
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")));