2

簡単に言えば、GUI を作成し、会議の参加者を記録するという目的に役立つ 5 つのクラスを作成しました。パネルを作成し、FocusListeners、ActionListeners、ItemListeners を追加しました。

収集できることから、クラッシュ時に表示されるメッセージはクラスパスに関連していますが、修正方法がよくわかりません。クラッシュが発生するコードは次のとおりです (パネルの 2 つのボタンに ActionListeners を追加したときです。

private void buildButtonPanel()
{
   //create the buttonpanel
   buttonPanel = new JPanel(new FlowLayout());
   //create the buttons
   calculate = new JButton("Calculate Charges");
   clear = new JButton    ("Clear");
   //add listeners to the buttons
   ConferenceHandler handler = new ConferenceHandler(this);
   calculate.addActionListener(handler);             //crash occurs on this line
   clear.addActionListener(handler);
   //create a text area
   JTextArea textArea = new JTextArea(5,30); 
   textArea.setLineWrap(true); textArea.setWrapStyleWord(true);
   //add a scrollbar to the textarea
   JScrollPane scroll = new JScrollPane (textArea);
   //add everything to the buttonpanel
   buttonPanel.add(calculate); buttonPanel.add(clear); buttonPanel.add(scroll);
}

私が得るクラッシュメッセージ:

java.lang.NoClassDefFoundError: ConferenceHandler
    at ConferenceGUI.buildButtonPanel(ConferenceGUI.java:63)
    at ConferenceGUI.<init>(ConferenceGUI.java:33)
    at IsItWorking.<init>(IsItWorking.java:16)
    at IsItWorking.main(IsItWorking.java:28)
Caused by: java.lang.ClassNotFoundException: ConferenceHandler
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
    at ConferenceGUI.buildButtonPanel(ConferenceGUI.java:63)
    at ConferenceGUI.<init>(ConferenceGUI.java:33)
    at IsItWorking.<init>(IsItWorking.java:16)
    at IsItWorking.main(IsItWorking.java:28)
    at __SHELL0.run(__SHELL0.java:6)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at bluej.runtime.ExecServer$3.run(ExecServer.java:774)

ここには経験豊富な人がたくさんいることは知っていますが、これについてはインターウェブで助けを見つけることができません.

4

1 に答える 1

3

ConferenceHandler の場所を Java に伝えることについては (愚かに聞こえることをお詫びします - 宿題の質問は初心者が行います)、私は Blue Jay を使用しており、メインをクリックするだけでプログラムが実行されます。コマンドラインからこれを行う方法がわかりません。

java参照する場所は、コマンドのドキュメントにあります。例えばここ。クラスパスとそれを設定するさまざまな方法について話している内容に特に注意してください。このページもお読みください。


クラスパスに問題があることに気付き、どうしようも直せませんでした。そこで、元のクラスをすべて取得して、それらをすべて新しいフォルダーに貼り付けたところ、魅力的に機能しました。

それがVoodooソリューションです。あなたは本当に問題を理解する必要があります。

そのために、上記のいくつかのコメントを再訪しましょう。

スタックトレースはそうでないことを示しています。それらはパッケージレスです (言い換えれば、BlueJ が文字通り何らかの方法であなたに伝えている場合、デフォルトのパッケージに含まれています)。– @BalusC

それが何を意味するのか知っていたらいいのに..... - @unit

@BalusC が意味することは、スタック トレースが、ロードしようとしていたクラスの完全な名前を示しているということです。

    ...
    Caused by: java.lang.ClassNotFoundException: ConferenceHandler
    ...

フルネーム (この場合) はConsoleHandler... ではありませんsome.pkg.ConsoleHandler

なぜこれが起こっているのかは完全には明らかではありませんが.classあなたが見ているソースコードと一致しない古いファイルを実際に実行していたのではないかと思います. そして、Voodoo ソリューションは、古い.classファイルを新しいものに置き換えることで、これを「修正」した可能性があります。しかし、そうであれば、ビルド/デプロイの方法の何が問題なのかを理解する必要があります。そうしないと、この種のことを何度も繰り返します。

于 2011-02-13T10:55:21.183 に答える