2016-06-21 15 views
3

Ich erstellen sehr einfache GUI mit WindowBuilder-Plugin für Eclipse. Ich bin mit Swing (vielleicht ein Problem?) Ich habe viel von Laufzeitfehlern bekam:Java-Fenster-Generator: Laufzeitfehler

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 

Code:

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"); 
    } 
} 

Bitte beachten Sie, dass JGoodies in den genannten Bibliotheken enthalten ist.

+0

Stellen Sie sicher, dass Sie das Jgoodies-Glas zum Projekt hinzufügen, es scheint, als ob es fehlt –

Antwort

2

jgoodies jar sollte im Klassenpfad der Laufzeit Ihrer Anwendung enthalten sein. Sie erwähnen, dass es in referenzierten Bibliotheken enthalten ist, was bedeutet, dass es sich um einen Kompilierungsklassenpfad handelt, aber das ist nicht genug. Um jar in den Klassenpfad der Laufzeit einzubinden, verwenden Sie -cp, wenn Sie die Anwendung java über die Befehlszeile ausführen.

+0

Danke. Wie kann ich es in Eclipse machen? – user1315621

+0

Es gibt mehrere Möglichkeiten, dies in Eclipse zu tun. Zum Beispiel in Run-Konfiguration der Anwendung gehen Sie auf "Classpath" -Registerkarte und fügen Sie jgoodies jar dort hinzu, indem Sie auf "Add JARs ..." klicken. – hgrey

+0

In run \ debug Einstellung ich jgoodies jar in beiden Boostrap-Einträge und Benutzereinträge hinzufügen, aber ich habe immer noch den gleichen Fehler – user1315621

2

Stellen Sie sicher, das Projekt enthält sowohl JGoodies-Common-xxxjar und JGoodies-formular xxxjar

Wenn Sie ein neues Fenster Projekt erstellen und eine JGoodies Komponente der Benutzeroberfläche hinzufügen, werden Sie die JAR-Datei erhalten, dann Sie können es einfach in Ihr Originalprojekt kopieren und darauf verweisen.

0

Wenn Ihr Projekt Maven ist, ist es besser JGoodies als Maven Abhängigkeit hinzuzufügen:

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

Diese alle Probleme lösen.