Java - Applet 到可执行 Jar 包装
Java - Applet to Executable Jar Wrapping
我写了一个 Java XML 解析器作为 Applet。在这种形式下,它的外观和功能都很好。
我的问题是,如果我想 运行 在没有浏览器的情况下执行此操作,我该如何将其正确包装为 运行 作为可执行文件?
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 和 JFRAM 等时,我没有得到正确的布局,或者正在打开多个 windows。任何人都可以提供帮助吗?第二个面板不断替换第一个。我真的很想尝试学习如何将多个组件放入一个可执行 jar 中。
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
默认使用 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#getResourceAsStream
。
this.setXmlEditor(new Parser(getClass().getResource("/test.xml")));
例如。您可能需要更改 Parser
以接受 URL
and/or InputStream
以及
我写了一个 Java XML 解析器作为 Applet。在这种形式下,它的外观和功能都很好。
我的问题是,如果我想 运行 在没有浏览器的情况下执行此操作,我该如何将其正确包装为 运行 作为可执行文件?
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 和 JFRAM 等时,我没有得到正确的布局,或者正在打开多个 windows。任何人都可以提供帮助吗?第二个面板不断替换第一个。我真的很想尝试学习如何将多个组件放入一个可执行 jar 中。
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
默认使用 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#getResourceAsStream
。
this.setXmlEditor(new Parser(getClass().getResource("/test.xml")));
例如。您可能需要更改 Parser
以接受 URL
and/or InputStream
以及