Экспортированный проект качелей не отображается должным образом - PullRequest
1 голос
/ 29 мая 2020

Я недавно экспериментировал со Swing (новичок) и, пытаясь сделать одно приложение для друга, столкнулся с проблемой. Я использую IDEA IDE, и макет, и все кадры отображаются правильно, но когда я экспортирую проект с помощью maven, файл jar показывает макет с отсутствующими панелями и кнопками.

Мой исходный код для кадра: ( Примечание. Я удалил все другие методы, поскольку они не изменяли макет (только геттеры и сеттеры для других объектов, а также удалил actionCalls и другой подобный код для кнопок.)

public class OOBFrame extends JFrame {
    private final Container c = getContentPane();
    private final DefaultListModel<Craft> textForWhite = new DefaultListModel<>();
    private final DefaultListModel<Craft> textForBlack = new DefaultListModel<>();
    private final JCraftList<Craft> whiteListedCrafts = new JCraftList<>(textForWhite);
    private final JCraftList<Craft> blackListedCrafts = new JCraftList<>(textForBlack);
    private final JScrollPane scrollerWhite = new JScrollPane(whiteListedCrafts);
    private final JScrollPane scrollerBlack = new JScrollPane(blackListedCrafts);
    private final SortedMap<Craft, ArrayList<JButton>> templateButtons = new TreeMap<>();
    private final JButton nextScreen = new JButton("Finish");
    private final JButton editing = new JButton("Edit selected");
    private final ArrayList<Craft> selectedCraftsFromList = new ArrayList<>();
    private JCraftPanel details;
    private final GridBagConstraints gcDetails;
    private JList<Craft> lastSelectedList;

    public OOBFrame(String title) {
        super(title);

        setLayout(new GridBagLayout());
        GridBagConstraints gc = new GridBagConstraints();

        c.setBackground(Gui.BACKGROUND);
        c.setLayout(new GridBagLayout());
        c.setPreferredSize(Gui.getMonitorSize());

        gc.gridx = 0;
        gc.gridy = 0;
        gc.fill = GridBagConstraints.HORIZONTAL;
        gc.anchor = GridBagConstraints.NORTH;
        gc.gridwidth = 6;
        getContentPane().add(new JMenuExt(1), gc);

        whiteListedCrafts.setBackground(Gui.BACKGROUND);
        whiteListedCrafts.setForeground(Color.WHITE);

        blackListedCrafts.setBackground(Gui.BACKGROUND);
        blackListedCrafts.setForeground(Color.WHITE);

        gc = new GridBagConstraints();
        gc.gridheight = OOB.TEMPLATE.getCrafts().size();
        gc.fill = GridBagConstraints.BOTH;
        gc.weighty = 4;
        gc.weightx = 1;
        gc.gridx = 0;
        gc.gridy = 1;
        getContentPane().add(scrollerWhite, gc);

        gc.gridx = 4;
        gc.gridwidth = 2;
        getContentPane().add(scrollerBlack, gc);


        gc.fill = GridBagConstraints.HORIZONTAL;
        gc.gridwidth = 1;
        gc.gridheight = 1;
        gc.gridy = 0;
        gc.gridx = 1;
        gc.weightx = 0.1;

        for (Craft craft : OOB.TEMPLATE.getCrafts()) {
            ++gc.gridy;
            templateButtons.put(craft, new ArrayList<>());
            templateButtons.get(craft).add(new JButton("+"));
            templateButtons.get(craft).add(new JButton("+"));

            c.add(templateButtons.get(craft).get(0), gc);
            ++gc.gridx;
            gc.weightx = 8;

            JLabel newLabel = new JLabel(craft.getName());
            newLabel.setForeground(Gui.FOREGROUND);
            newLabel.setHorizontalAlignment(SwingConstants.CENTER);
            newLabel.setPreferredSize(new Dimension(200, 20));
            c.add(newLabel, gc);

            gc.weightx = 0.1;
            ++gc.gridx;
            c.add(templateButtons.get(craft).get(1), gc);
            gc.gridx -= 2;

            templateButtons.get(craft).get(0).addActionListener(e -> {
                Craft newCraft = craft.copy(Side.WHITE);
                OOB.WHITE.addCraft(newCraft);
                textForWhite.addElement(newCraft);
                whiteListedCrafts.updateUI();
            });
            templateButtons.get(craft).get(1).addActionListener(e -> {
                Craft newCraft = craft.copy(Side.BLACK);
                OOB.BLACK.addCraft(newCraft);
                textForBlack.addElement(newCraft);
                blackListedCrafts.updateUI();
            });
        }

        gc.anchor = GridBagConstraints.SOUTH;
        ++gc.gridy;
        ++gc.gridy;
        gc.gridx = 5;
        gc.fill = GridBagConstraints.BOTH;
        //nextScreen.setPreferredSize(new Dimension(200, 100));
        getContentPane().add(nextScreen, gc);

        details = new JCraftPanel(" ", selectedCraftsFromList, false);
        gcDetails = new GridBagConstraints();
        gcDetails.gridx = 0;
        gcDetails.gridy = gc.gridy;
        gcDetails.gridwidth = 4;
        gcDetails.gridheight = 2;
        gcDetails.weighty = 2;
        gcDetails.fill = GridBagConstraints.BOTH;
        add(details, gcDetails);

        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        validate();
        pack();
        setExtendedState(JFrame.MAXIMIZED_BOTH);
        setVisible(false);
    }
}

Here is shown comparison of opening jar (left) vs starting the app in IDE (right)

Спасибо за понимание того, что я мог сделать неправильно. Frame также имеет значение setVisible (true) в предыдущем кадре приложения, так что это не проблема. Я могу предоставить любой код других ярлыков и панелей, если необходимо, или всего проекта.

Отредактировано:

Console run of the jar.
D:\GitProjects\KSP-NoU-Battle System 3\target>java -cp Battle_Simulator_3.0-1.0.0.0.jar impl.App
java.nio.file.NoSuchFileException: database.csv
[ERR 17:02:24] java.nio.file.NoSuchFileException: countermeasures.txt
[ERR 17:02:24] java.nio.file.NoSuchFileException: weapons.txt
[LOG 17:02:24] Crafts saved:      [0]

Затем журнал заканчивается, но запускается первое окно приложения. За ним следует неправильное окно.

Решено: в приложении отсутствовали файлы ресурсов, в результате чего панели не загружались.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...