2016-06-21 2 views
3

Я создаю очень простой Gui, используя плагин WindowBuilder для Eclipse. Я использую Свинг (может быть проблема?) У меня много ошибок во время выполнения:Java window builder: ошибка времени выполнения

Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: com/jgoodies/common/base/Preconditions 
    at com.jgoodies.forms.layout.FormSpec.<init>(FormSpec.java:179) 
    at com.jgoodies.forms.layout.ColumnSpec.<init>(ColumnSpec.java:147) 
    at com.jgoodies.forms.layout.FormSpecs.<clinit>(FormSpecs.java:62) 
    at com.jgoodies.forms.layout.LayoutMap.createRoot(LayoutMap.java:569) 
    at com.jgoodies.forms.layout.LayoutMap.getRoot(LayoutMap.java:217) 
    at com.jgoodies.forms.layout.ColumnSpec.decode(ColumnSpec.java:199) 
    at it.myweb.project.GUI.TestGUI.initialize(TestGUI.java:50) 
    at it.myweb.project.GUI.TestGUI.<init>(TestGUI.java:39) 
    at it.myweb.project.GUI.TestGUI$1.run(TestGUI.java:26) 
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311) 
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756) 
    at java.awt.EventQueue.access$500(EventQueue.java:97) 
    at java.awt.EventQueue$3.run(EventQueue.java:709) 
    at java.awt.EventQueue$3.run(EventQueue.java:703) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) 
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:726) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) 
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) 
Caused by: java.lang.ClassNotFoundException: com.jgoodies.common.base.Preconditions 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    ... 23 more 

Код:

import java.awt.EventQueue; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JTextArea; 
import javax.swing.JTextField; 

import com.jgoodies.forms.layout.ColumnSpec; 
import com.jgoodies.forms.layout.FormLayout; 
import com.jgoodies.forms.layout.RowSpec; 

public class TestGUI { 

    private JFrame frame; 
    private JTextField textField; 

    /** 
    * Launch the application. 
    */ 
    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       try { 
        ChatGUI window = new ChatGUI(); 
        window.frame.setVisible(true); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 
    } 

    /** 
    * Create the application. 
    */ 
    public ChatGUI() { 
     initialize(); 
    } 

    /** 
    * Initialize the contents of the frame. 
    */ 
    private void initialize() { 
     frame = new JFrame(); 
     frame.setBounds(100, 100, 1006, 737); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().setLayout(new FormLayout(new ColumnSpec[] { 
       ColumnSpec.decode("default:grow"), 
       ColumnSpec.decode("right:max(50dlu;default)"),}, 
      new RowSpec[] { 
       RowSpec.decode("fill:default:grow"), 
       RowSpec.decode("bottom:max(30dlu;default)"),})); 

     JTextArea textArea = new JTextArea(); 
     frame.getContentPane().add(textArea, "1, 1, 2, 1, fill, fill"); 

     textField = new JTextField(); 
     frame.getContentPane().add(textField, "1, 2, fill, center"); 
     textField.setColumns(10); 

     JButton btnNewButton = new JButton("Invia"); 
     frame.getContentPane().add(btnNewButton, "2, 2, center, center"); 
    } 
} 

Пожалуйста, обратите внимание, что JGoodies включен в ссылочных библиотеках.

+0

Убедитесь, что вы добавили jgoodies jar в проект, кажется, что этого не хватает –

ответ

2

jgoodies jar должен быть включен в путь пути выполнения приложения. Вы упомянули, что это включено в библиотеки ссылок, которые предположительно означают, что они находятся в компиляции classpath, но этого недостаточно. Чтобы включить jar в runtime classpath, используйте переключатель -cp при запуске приложения java с командной строкой.

+0

Спасибо. Итак, как я могу сделать это в Eclipse? – user1315621

+0

Существует несколько способов сделать это в Eclipse. Например, при запуске конфигурации приложения перейдите на вкладку «Класс» и добавьте jgoodies jar туда, нажав «Добавить JARs ...». – hgrey

+0

В параметре run \ debug я добавляю jgoodies jar как в записях boostrap, так и в пользовательских записях, но я все еще получаю ту же ошибку – user1315621

2

Убедитесь, что проект содержит как JGoodies-здравого xxxjar и JGoodies-форм-xxxjar

Если вы создаете новый проект окна и добавить компонент JGoodies в UI вы получите файл банки, то вы можете просто скопировать его в свой оригинальный проект и ссылаться на него.

0

Если ваш проект Maven, то лучше добавить JGoodies, как Maven зависимость:

<dependency> 
    <groupId>com.jgoodies</groupId> 
    <artifactId>jgoodies-forms</artifactId> 
    <version>1.8.0</version> 
</dependency> 

Это решит все проблемы.

 Смежные вопросы

  • Нет связанных вопросов^_^