2016-06-21 12 views
3

Eclipse用のWindowBuilderプラグインを使用して非常に簡単なGUIを作成します。私は、ランタイムエラーの多くを持ってスイング(?多分問題) を使用しています:Javaウィンドウビルダ:ランタイムエラー

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は、アプリケーションの実行時クラスパスに含める必要があります。参照されているライブラリに含まれていると言います。これはおそらくコンパイルされたクラスパス上にあることを意味しますが、これでは十分ではありません。ランタイムクラスパスにjarを含めるには、コマンドラインでjavaアプリケーションを実行するときに-cpスイッチを使用します。

+0

ありがとうございます。だから私はEclipseでどのようにすることができますか? – user1315621

+0

Eclipseでこれを行うにはいくつかの方法があります。たとえば、アプリケーションの実行構成では、「クラスパス」タブに移動し、「JARを追加...」をクリックしてjgoodies jarを追加します。 – hgrey

+0

run \ debugの設定で、私はboostrapエントリとユーザエントリの両方にjgoodies jarを追加しましたが、まだ同じエラーがあります – user1315621

2

プロジェクトはなJGoodies-共通xxxjarとなJGoodies-フォームxxxjar

の両方が含まれていることを確認してくださいあなたは新しいウィンドウプロジェクトを作成し、UIになJGoodiesコンポーネントを追加する場合は、その後、jarファイルを取得します元のプロジェクトにコピーして参照するだけです。

0

プロジェクトがMavenのであれば、Mavenの依存関係としてなJGoodiesを追加した方がよい:

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

これはすべての問題を解決。