2011-12-20 65 views
1

我正在製作一個用於修補mods並將紋理包添加到Minecraft中的Java應用程序。我希望它使用通過DJ項目JWebBrowser訪問的在線mod商店。我使用Eclipse WindowBuilder /手動編碼來構建UI。我的問題是使用的WindowBuilder以下錯誤Eclipse 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,以及任何幫助,我將不勝感激!

+0

哇,這是一些嚴重的縮進!哪條線是違規線845線? – Paul

+0

那是我使用的[DJ項目庫](http://djproject.sourceforge.net/main/index.html)的一部分 – Mika

+0

啊,好的。 「如果我正常運行」是什麼意思?什麼是正常的? – Paul

回答

3

我可以回答你的問題的一半 - 也許澄清我會找出其餘的。

您需要將ActionListener附加到JMenuItem而不是MouseListener。有關一些非常好的示例,請參見Oracle的教程How to Use Menus

+0

謝謝。這非常有幫助! – Mika

1

實際上,基於異常,它看起來像chrriis.dj.nativeswing.swtimpl.core.SWTNativeComponent類引起了問題,WindowBuilder爲您捕獲錯誤。我假設它在設計頁面上顯示了這一點(正如它設計的那樣)並沒有實際「崩潰」。

@Paul - WindowBuilder已經生成了非常清晰和可維護的代碼,所以沒有理由「拋棄」它。它也非常兼容手工製作的MODS,因此您可以輕鬆地在來源或設計模式下來回工作,並且WB將始終保持同步。

+0

是的,它顯示在設計頁面,但我不知道爲什麼windowbuilder會顯示錯誤和java通常。 – Mika