Java Standalone 可运行的 GUI 应用程序 - 无法获取 jar 文件来打开程序

标签 java mysql swing jar runnable

我正在开发一个 GUI 客户端,它将是一个独立的应用程序,充当 MySQL 数据库后端的前端。我已经为客户完成了所有逻辑和编码,但我终生无法将项目导出到可运行的 .jar 文件。

我有由 Eclipse 生成的 manifest.txt,位于 META-INF 文件夹中。

这是我的主要方法:

package binaparts.main;

import binaparts.gui.*;

public class Main{

public static void main(String[] args){

    MainFrames m = new MainFrames();
    m.displayGUI();
}
}

这是 MainFrames 类:

package binaparts.gui;

import java.awt.CardLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.ItemListener;
import java.sql.*;

import javax.swing.AbstractButton;
import javax.swing.BorderFactory;
import javax.swing.ButtonGroup;
import javax.swing.ComboBoxModel;
import javax.swing.DefaultComboBoxModel;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JRadioButton;
import javax.swing.JTextField;
import javax.swing.LayoutStyle.ComponentPlacement;

import org.json.JSONArray;
import org.json.JSONObject;

import binaparts.dao.*;
import binaparts.properties.ConfigurationManager;

public class MainFrames extends JFrame
{
private MainPanel main;
private CreatePanel create;
private UpdatePanel update;
private FindPanel find;
private SettingsPanel settings;
private ManageUsersPanel Manage;
JFrame frame = new JFrame("Main Menu:");
static final String configFilePath = "META-INF/config.properties";
DBConnect con = new DBConnect();
ConfigurationManager config = null;

public void run(){
  displayGUI();
}

public void displayGUI()
{
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JPanel contentPane = new JPanel();
    contentPane.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
    contentPane.setLayout(new CardLayout());
    main = new MainPanel(contentPane);
    create = new CreatePanel(contentPane);
    update = new UpdatePanel(contentPane);
    find = new FindPanel(contentPane);
    settings = new SettingsPanel(contentPane);
    Manage = new ManageUsersPanel(contentPane);
    contentPane.add(main, "Main Menu");
    contentPane.add(create, "Create Part");
    contentPane.add(update, "Update Part");
    contentPane.add(find, "Find Part");
    contentPane.add(settings, "Settings");
    contentPane.add(Manage, "Manage Users");
    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    int height = screenSize.height;
    int width = screenSize.width;
    frame.setResizable(false);
    frame.setSize(width/2, height/2);
    frame.setLocationRelativeTo(null);
    frame.setSize(700, 580);
    frame.setContentPane(contentPane);
    frame.setVisible(true); 
}
class MainPanel extends JPanel{Contains code for that frame}
class MainPanel extends JPanel{Contains code for that frame}
class CreatePanel extends JPanel{Contains code for that frame}
class UpdatePanel extends JPanel{Contains code for that frame}
class FindPanel extends JPanel{Contains code for that frame}
class SettingsPanel extends JPanel{Contains code for that frame}
class ManageUsersPanel extends JPanel{Contains code for that frame}
}

我没有包含每个面板的代码,以免造成困惑。还有一些其他类可以很好地管理配置属性和数据库连接。

我的问题是:我的主要方法/displayGUI 交互或创建 jar 的过程是否有问题?

在此先感谢您的帮助!

我运行了 cmd java -jar my.jar 并得到了

Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

C:\Users\Danny>cd desktop

C:\Users\Danny\Desktop>cd executable

C:\Users\Danny\Desktop\Executable>java -jar BinaPartsManager.jar
java.io.FileNotFoundException: META-INF\config.properties (The system cannot fin
d the path specified)
        at java.io.FileOutputStream.open(Native Method)
        at java.io.FileOutputStream.<init>(Unknown Source)
        at java.io.FileOutputStream.<init>(Unknown Source)
        at binaparts.properties.ConfigurationManager.save(ConfigurationManager.j
ava:41)
        at binaparts.properties.ConfigurationManager.<init>(ConfigurationManager
.java:21)
        at binaparts.dao.DBConnect.verifyUser(DBConnect.java:87)
        at binaparts.gui.MainFrames$MainPanel.setStatus(MainFrames.java:110)
        at binaparts.gui.MainFrames$MainPanel.<init>(MainFrames.java:137)
        at binaparts.gui.MainFrames.displayGUI(MainFrames.java:66)
        at binaparts.main.RunProgram.main(RunProgram.java:10)
java.lang.NullPointerException
        at binaparts.dao.DBConnect.close(DBConnect.java:21)
        at binaparts.gui.MainFrames$MainPanel.setStatus(MainFrames.java:127)
        at binaparts.gui.MainFrames$MainPanel.<init>(MainFrames.java:137)
        at binaparts.gui.MainFrames.displayGUI(MainFrames.java:66)
        at binaparts.main.RunProgram.main(RunProgram.java:10)
Exception in thread "main" java.lang.NullPointerException
        at javax.swing.ImageIcon.<init>(Unknown Source)
        at binaparts.gui.MainFrames$MainPanel.<init>(MainFrames.java:147)
        at binaparts.gui.MainFrames.displayGUI(MainFrames.java:66)
        at binaparts.main.RunProgram.main(RunProgram.java:10)

我将 config.properties 文件存储在 META-INF 文件夹中。不过它在 IDE 中运行良好。

最佳答案

同样:“您可以使用 Java 资源将属性文件加载为 (有关相关教程,请参阅 tag info),但您不能在其中存储将要更改的值”。你还没有说他们是否会改变。

如果您要存储一些东西,(新的)方法是使用 java.util.Preferences API。

如果你真的需要自己的文件,我想用户的主目录就是放置你自己的目录来存储文件的地方,查找user.home作为一个系统参数。

关于Java Standalone 可运行的 GUI 应用程序 - 无法获取 jar 文件来打开程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18339373/

相关文章:

java - 用户输入以在 Java 中重复程序

mysql 恢复另一台服务器上的文件

mysql - 使用 'NOT BETWEEN' 约束查询不同的记录列表

Java awt Swing - 我遇到错误了吗?

java - 多次按下排序按钮时排序表错误?

java - 如何阅读 Java 中的完整堆栈跟踪,例如 "... 23 more"

java - simpleDateformat 解析问题

java - 定义命名空间时,使用 Maven 创建的架构验证 XML 失败

php - 将带有一些输入字段的动态生成的表保存到 mysql 表中

java - 创建颜色数组然后将其用于 Jbuttons?