gpt4 book ai didi

Java - Applet 到可执行 Jar 包装

转载 作者:行者123 更新时间:2023-12-02 04:34:55 25 4
gpt4 key购买 nike

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

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 和 JFRame 等时,我没有得到正确的布局,或者打开了多个窗口。有人可以提供帮助吗?第二个面板不断取代第一个面板。我的目标是真正尝试学习如何将多个组件放入可执行 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#getResourceClass#getResourceAsStream

this.setXmlEditor(new Parser(getClass().getResource("/test.xml")));
例如。您可能需要更改您的 Parser 以接受 URL 和/或 InputStream

关于Java - Applet 到可执行 Jar 包装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30959390/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com