2011-12-20 8 views
1

저는 Mods에 패치를 적용하고 텍스처 팩을 Minecraft에 추가하기위한 Java 애플리케이션을 만들고 있습니다. DJ Project JWebBrowser를 통해 액세스 할 수있는 온라인 모드 저장소를 사용하고 싶습니다. UI를 생성하기 위해 Eclipse WindowBuilder/hand 코딩을 사용하고 있습니다. 내 문제는 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 이벤트를 실행하지 않았다. 자바 1.6, WindowBuilder 1.2.0.r37, 이클립스 인디고를 사용 중입니다. 도움을 받으실 수 있습니다!

+0

와우, 그게 심각한 들여 쓰기입니다! 문제가되는 라인 인 845 라인은 어느 라인입니까? – Paul

+0

그 부분은 [DJ 프로젝트 라이브러리] (http://djproject.sourceforge.net/main/index.html)의 일부분입니다. – Mika

+0

아, 그래. "정상적으로 운영한다면"당신은 무엇을 의미 했습니까? 정상적으로 뭐야? – Paul

답변

3

나는 반 질문에 대답 할 수 있습니다. 아마도 나머지는 알아낼 것입니다.

ActionListenerJMenuItem에 첨부해야하며 MouseListener이 아니어야합니다. 가장 좋은 예제는 오라클의 튜토리얼 How to Use Menus을 참조하십시오.

+0

감사합니다. 그것은 많은 도움이되었습니다! – Mika

1

실제로 예외를 기반으로 chrriis.dj.nativeswing.swtimpl.core.SWTNativeComponent 클래스가 문제를 일으키고 WindowBuilder가 오류를 트래핑 한 것처럼 보입니다. 나는 그것이 설계된 페이지에서 (설계된대로) 이것을 보여 주며 실제로 "충돌"하지 않았다고 가정합니다.

@Paul - WindowBuilder는 이미 매우 명확하고 유지 보수가 쉬운 코드를 생성하기 때문에 "버려야 할"이유가 없습니다. 또한 손으로 만든 개조 물과도 매우 호환되므로 소스 또는 디자인 모드에서 쉽게 앞뒤로 작업 할 수 있으며 WB는 항상 두 가지를 모두 유지합니다.

+0

그래, 디자인 페이지에서 보여 줬지만 왜 windowbuilder가 오류를 보여줄지 모르겠다. – Mika

관련 문제