Eclipse WindowBuilder Ошибка? - PullRequest
       8

Eclipse WindowBuilder Ошибка?

1 голос
/ 20 декабря 2011

Я делаю Java-приложение для исправления модов и добавления текстурных пакетов в Minecraft.Я хочу использовать онлайн-магазин модов, доступ к которому осуществляется через DJ Project JWebBrowser.Я использую Eclipse WindowBuilder / ручное кодирование для создания пользовательского интерфейса.Моя проблема в том, что WindowBuilder падает со следующей ошибкой

    Stack trace:
java.lang.IllegalArgumentException: Width (125) and height (0) cannot be <= 0
    at java.awt.image.DirectColorModel.createCompatibleWritableRaster(Unknown Source)
    at java.awt.image.BufferedImage.<init>(Unknown Source)
    at chrriis.dj.nativeswing.swtimpl.core.SWTNativeComponent.print(SWTNativeComponent.java:845)
    at sun.awt.windows.WComponentPeer.print(Unknown Source)
    at java.awt.GraphicsCallback$PeerPrintCallback.run(Unknown Source)
    at sun.awt.SunGraphicsCallback.runOneComponent(Unknown Source)
    at java.awt.Component.printAll(Unknown Source)
    at org.eclipse.wb.internal.swing.utils.SwingImageUtils$2.run(SwingImageUtils.java:104)
    at org.eclipse.wb.internal.swing.utils.SwingImageUtils.runInDispatchThread(SwingImageUtils.java:554)
    at org.eclipse.wb.internal.swing.utils.SwingImageUtils.createComponentShotAWT(SwingImageUtils.java:102)
    at org.eclipse.wb.internal.swing.utils.SwingImageUtils.makeShotsHierarchy(SwingImageUtils.java:235)
    at org.eclipse.wb.internal.swing.utils.SwingImageUtils.makeShotsHierarchy(SwingImageUtils.java:261)
    at org.eclipse.wb.internal.swing.utils.SwingImageUtils.makeShotsHierarchy(SwingImageUtils.java:261)
    at org.eclipse.wb.internal.swing.utils.SwingImageUtils.makeShotsHierarchy(SwingImageUtils.java:261)
    at org.eclipse.wb.internal.swing.utils.SwingImageUtils.makeShotsHierarchy(SwingImageUtils.java:261)

Странная вещь в том, что он работает, если я его запускаю нормально, он работает просто отлично.Вот соответствующий исходный код:

setTitle("OpenMPatch");
        getContentPane().setLayout(new BorderLayout(0, 0));

        JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);
        getContentPane().add(tabbedPane);

        JPanel tabModStore = new JPanel();
        tabbedPane.addTab("Mod Store", null, tabModStore, "Mod Store");

        JWebBrowser modStore = new JWebBrowser();
        modStore.setStatusBarVisible(false);
        tabModStore.add(modStore);

        JPanel tabSettings = new JPanel();
        tabbedPane.addTab("Settings", null, tabSettings, "Settings");

        comboBoxTheme = new JComboBox();
        comboBoxTheme.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                setLAF(comboBoxTheme.getSelectedItem().toString());
            }
        });
        comboBoxTheme.setModel(new DefaultComboBoxModel(new String[] {
                "system", "java", "motif", "nimbus", "windows",
                "windowsclassic" }));
        try {
            comboBoxTheme.setSelectedItem(Config.ReadConfig().get("LAF"));
        } catch (Exception e) {
            e.printStackTrace();
            OpenMPatch.error(e);
        }

        JLabel lblTheme = new JLabel("Theme:");
        lblTheme.setLabelFor(comboBoxTheme);
        lblTheme.setFont(new Font("Tahoma", Font.PLAIN, 12));
        lblTheme.setHorizontalAlignment(SwingConstants.RIGHT);

        JButton btnSaveSettings = new JButton("Save Settings");
        btnSaveSettings.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent arg0) {
                saveSettings();
            }
        });

        JButton btnRestoreDefualts = new JButton("Restore Defualts");
        btnRestoreDefualts.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent arg0) {
                try {
                    Config.restoreDefualts();
                    updateSettings();
                } catch (Exception e) {
                    e.printStackTrace();
                    error(e);
                }
            }
        });
// Generated by WindowBuilder
        GroupLayout gl_tabSettings = new GroupLayout(tabSettings);
        gl_tabSettings
                .setHorizontalGroup(gl_tabSettings
                        .createParallelGroup(Alignment.LEADING)
                        .addGroup(
                                gl_tabSettings
                                        .createSequentialGroup()
                                        .addContainerGap()
                                        .addGroup(
                                                gl_tabSettings
                                                        .createParallelGroup(
                                                                Alignment.LEADING)
                                                        .addGroup(
                                                                gl_tabSettings
                                                                        .createSequentialGroup()
                                                                        .addComponent(
                                                                                lblTheme)
                                                                        .addPreferredGap(
                                                                                ComponentPlacement.RELATED)
                                                                        .addComponent(
                                                                                comboBoxTheme,
                                                                                GroupLayout.PREFERRED_SIZE,
                                                                                GroupLayout.DEFAULT_SIZE,
                                                                                GroupLayout.PREFERRED_SIZE))
                                                        .addGroup(
                                                                gl_tabSettings
                                                                        .createSequentialGroup()
                                                                        .addComponent(
                                                                                btnSaveSettings)
                                                                        .addPreferredGap(
                                                                                ComponentPlacement.RELATED)
                                                                        .addComponent(
                                                                                btnRestoreDefualts)))
                                        .addContainerGap(365, Short.MAX_VALUE)));
        gl_tabSettings
                .setVerticalGroup(gl_tabSettings
                        .createParallelGroup(Alignment.LEADING)
                        .addGroup(
                                gl_tabSettings
                                        .createSequentialGroup()
                                        .addContainerGap()
                                        .addGroup(
                                                gl_tabSettings
                                                        .createParallelGroup(
                                                                Alignment.BASELINE)
                                                        .addComponent(lblTheme)
                                                        .addComponent(
                                                                comboBoxTheme,
                                                                GroupLayout.PREFERRED_SIZE,
                                                                GroupLayout.DEFAULT_SIZE,
                                                                GroupLayout.PREFERRED_SIZE))
                                        .addGap(18)
                                        .addGroup(
                                                gl_tabSettings
                                                        .createParallelGroup(
                                                                Alignment.BASELINE)
                                                        .addComponent(
                                                                btnSaveSettings)
                                                        .addComponent(
                                                                btnRestoreDefualts))
                                        .addContainerGap(274, Short.MAX_VALUE)));
        tabSettings.setLayout(gl_tabSettings);

        JPanel statusBar = new JPanel();
        statusBar.setToolTipText("Status");
        getContentPane().add(statusBar, BorderLayout.SOUTH);

        setIconImage(Toolkit.getDefaultToolkit().getImage(
                OpenMPatch.class.getResource("/alex/mik/openmpatch/icon.png")));

        JMenuBar menuBar = new JMenuBar();
        setJMenuBar(menuBar);

        JMenu mnFile = new JMenu("File");
        menuBar.add(mnFile);

        JMenuItem mntmOpenFile = new JMenuItem("Open File...");
        mntmOpenFile.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent paramMouseEvent) {

            }
        });
        mntmOpenFile.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,
                InputEvent.CTRL_MASK));
        mnFile.add(mntmOpenFile);

        JMenuItem mntmOpenFolder = new JMenuItem("Open Folder...");
        mntmOpenFolder.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,
                InputEvent.CTRL_MASK | InputEvent.SHIFT_MASK));
        mnFile.add(mntmOpenFolder);

        JSeparator fileSeparator1 = new JSeparator();
        mnFile.add(fileSeparator1);

        JMenuItem mntmQuit = new JMenuItem("Quit");
        mntmQuit.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent arg0) {
                close();
            }
        });
        mntmQuit.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q,
                InputEvent.CTRL_MASK));
        mnFile.add(mntmQuit);
        setDefaultCloseOperation(DISPOSE_ON_CLOSE);
        pack();

И пока я здесь, кнопка mntmQuit ничего не делает.Я отладил его, и он даже не запустил событие mouseClicked, когда щелкнул по нему.Я использую Java 1.6, WindowBuilder 1.2.0.r37, Eclipse Indigo, и любая помощь будет признательна!

Ответы [ 2 ]

3 голосов
/ 20 декабря 2011

Я могу ответить на половину вашего вопроса - возможно, с уточнением я выясню все остальное.

Вам необходимо прикрепить ActionListener к JMenuItem, а не MouseListener.См. Руководство Oracle Как использовать меню для некоторых очень хороших примеров.

1 голос
/ 24 декабря 2011

На самом деле, исходя из исключения, похоже, что класс chrriis.dj.nativeswing.swtimpl.core.SWTNativeComponent вызвал проблему, и WindowBuilder перехватил эту ошибку. Я предполагаю, что это показало вам это на странице «Дизайн» (как это было задумано) и на самом деле не «вылетало».

@ Paul - WindowBuilder уже генерирует очень понятный и легко обслуживаемый код, поэтому не было бы никакой причины «отказываться» от него. Он также чрезвычайно совместим с модами, сделанными вручную, так что вы можете легко работать вперед и назад в исходном или дизайнерском режиме, а WB будет постоянно синхронизировать оба.

...