0

一連のボタンイベントで選択された配列から要素を収集し、それを「oneRay」と呼ばれる新しい配列にコピーし、その要素を循環してユーザーの知識をテストする単純なシステムに取り組んでいます。ユーザーがプロンプトからの回答を正しく識別した場合、そのセクションの 2D 配列の最初の要素は "" になり、次のコードでスキップされます。

        do{
        pick = random.nextInt(oneRay.length);
    }while(!(oneRay[pick][0].equals("")));

前述の例外を返し続けます。次のコードは、問題のクラスのメンバーとして random を作成します。

Random random = new Random()

それで、私は何が間違っているのでしょうか?どんな助けでも大歓迎です。

更新: はい、要素は、選択した配列を oneRay に適切に指示する一連の switch ステートメントによって初期化されます。

Swing UI をビルドしようとしているときに起動されるため、エラー レポートが膨大で、左右に失敗を投げかけます。

初期化に使用したものは次のとおりです。

switch(subject){
    case 1:
        switch(unit){
        case 1: oneRay = new String[Master.SciChemArray_IntroductionANDFirstChapter.length][2];
           for(int i = 0; (Master.SciChemArray_IntroductionANDFirstChapter.length) > i; i++){
               oneRay[i][0] = Master.SciChemArray_IntroductionANDFirstChapter[i][0];oneRay[i][1] = Master.SciChemArray_IntroductionANDFirstChapter[i][1];}
        default: System.exit(0); break;
        } break;
    case 2:
        switch(unit){
        case 1: 
            oneRay = new String[Master.MathaRay_Part2.length][2];
           for(int i = 0; (Master.MathaRay_Part2.length) > i; i++){
               oneRay[i][0] = Master.MathaRay_Part2[i][0]; oneRay[i][1] = Master.MathaRay_Part2[i][1];} break;
        default: System.exit(0); break;
        } break;

このセットアップを作成するとき、サブジェクトとユニット番号に対応する番号を渡します。これらは、関連する配列をコピーするために使用されます ^^

Unit と Subject は次のように渡されます。

         mathstatb1.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent l) {
            new SwingImplementation(2, 1);
        }}); 

これにより、ボタンがサブジェクト 2 とユニット 1 を送信します

そして、ここにエラーがあります。誰かが本当にそれらを必要としている場合は、今は一番下にあります:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at wbh.SwingImplementation.<init>(SwingImplementation.java:60)
at wbh.matstatMenu$1.actionPerformed(matstatMenu.java:23)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$200(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
4

2 に答える 2

0

すべての oneRay 配列値が正しく初期化されていることを確認してください。

次の行は、NullPointer の可能性が最も高いようです。null に対して .equals() メソッドを呼び出そうとすると、NullPointer がスローされます。

oneRay[pick][0].equals("");
于 2013-09-21T20:15:28.740 に答える
-1

コード全体を貼り付けると、より明確になります。現在のコードでは、以下が nullpointer をスローしている可能性があります。

!(oneRay[pick][0].equals(""))

に変更します

!("".equals(oneRay[pick][0]))
于 2013-09-21T20:08:27.900 に答える