0

在下面的代码中,我不知道为什么从 jButton1ActionPerformed 方法访问时变量 uNomba 和 list 的值为 NULL。感谢您对我如何成功执行“new NewPlayer(uNomba, count, check, list).load();”的帮助。这样所有的值都传递给 NewPlayer 类。谢谢你。

第一类——即NewPlayer类

package mysound;

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class NewPlayer extends JPanel implements KeyListener, Runnable{
boolean isUpPressed, isDownPressed, isSpacePressed, isDone;
static JFrame f;
int spacebars=0;
boolean within;
public List spacebarLogMs = new ArrayList(); 
public List numSbar = new ArrayList();
Calendar cal = Calendar.getInstance();
LogResult logNow = new LogResult();
String directory;
String tabname; //table name used in the database connection
String bdir;
private int uNomba; //user number obtained from NewSound class
private String target;
private int incr;
private int userno;
private boolean moveon=true;
private List randlist;
private List numlist;

public void load() {
    f = new JFrame();
    f.setSize(600,300);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setContentPane(this);
    f.setVisible(true);     
    setFocusable(true);
    addKeyListener(this);
    new Thread(this).start();
}

public NewPlayer() {   

}

public NewPlayer(int UNOMBA, List NUMLIST){
    this.uNomba = UNOMBA; //user number obtained from NewSound class
    this.numlist=NUMLIST;
}    
public NewPlayer(int USERNO, int INCR, boolean MOVEON, List NUMLIST){
    this.userno=USERNO;
    this.incr=INCR;
    this.moveon=MOVEON;
    this.numlist=NUMLIST;
}

public void keyTyped(KeyEvent ke) {
}

public void keyPressed(KeyEvent ke) {
    switch(ke.getKeyCode()) {
        case KeyEvent.VK_UP: isUpPressed = true; break;
        case KeyEvent.VK_DOWN: isDownPressed = true; break;
        case KeyEvent.VK_SPACE: isSpacePressed = true; 

        numSbar.add(System.currentTimeMillis());
            System.out.println("That was a spacebar. "+spacebars++);
            System.out.println("Current time: "+numSbar);
            break;
    }
}

public void keyReleased(KeyEvent ke) {
    switch(ke.getKeyCode()) {
        case KeyEvent.VK_UP: isUpPressed = false; break;
        case KeyEvent.VK_DOWN: isDownPressed = false; break;
        case KeyEvent.VK_SPACE: isSpacePressed = false; break;
    }
}

public void closePrj(){
    f.dispose();
}

public void run() { //introduce a target sound

   String targetChoice;
   int tIndex;       
   int i;
   bdir="C:\\Users\\Abiodun\\Desktop\\testdata\\main\\zero\\atext\\"; //dir for text files


   MainPlayer items =  new MainPlayer (uNomba);

   i=incr;
   while(moveon){
       System.out.println("Counter i: "+i+" Numlist: "+numlist);
       if (i<numlist.size()){
            int num = (int) numlist.get(i);
            System.out.println("Num :"+num);
            items.selectTarget(num);           
            items.selectChallenge(num);
            items.playChallenge();
            new WriteTime(bdir).tagTime(numSbar);
            items.dataLogger();
            moveon=false;
            new Continue (uNomba, i, moveon, numlist).load();
       }

   }
}
}

第二类即Continue类

public class Continue extends javax.swing.JDialog {
    private int count;
    private int usernumb;
    private boolean check;
    private int uNomba;
    private String cdirectory;
    private String cbdir;
    private String ctabname;
    private String ctarget;
    private List list;

/**
 * Creates new form Continue
 */
public Continue(java.awt.Frame parent, boolean modal) {
    super(parent, modal);
    initComponents();
}

public Continue(int CUNOMBA, int COUNT, boolean CHECK, List NLIST){
    this.uNomba = CUNOMBA; //user number obtained from NewSound class
    this.count=COUNT;
    this.check=CHECK;
    this.list=NLIST;
}

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    // TODO add your handling code here:
    new NewPlayer().setVisible(false);//closePrj();
    count++;
    check=true;
    new NewPlayer(uNomba, count, check, list).load();        
            System.out.println("Continue: UserNumber: "+uNumb+", Count: "+count+", Check: "+check+", nList"+lst);
    this.setVisible(false);         
}

谢谢斯格罗。这是我刚刚添加的内容:我在 NewPlayer 类中创建了以下内容: Continue ct = new Continue (new NewPlayer(uNomba, i, moveon, numlist));

在 Continue Class 中,私有 NewPlayer np;

public Continue (NewPlayer npy){
    this.npy=np;
}

回顾一下,我遇到的主要问题是我无法从 Continue 类访问从 NewPlayer 类传递的值。我在 Continue 类的以下构造函数中测试了值,但在 Continue 类的其他任何地方都没有。

public Continue(int CUNOMBA, int COUNT, boolean CHECK, List NLIST){
    this.uNomba = CUNOMBA; //user number obtained from NewSound class
    this.count=COUNT;
    this.check=CHECK;
    this.nlist=NLIST;


   System.out.println("Continue-constructor - uNomba: "+uNomba+", nList: "+list); //works fine! but not outside this constructor.
}
4

2 回答 2

0

您必须使用正确的构造函数创建 Continue 对象或创建 Default 构造函数。

您还想打印 System.out.println 中不存在的变量 uNumb。

于 2012-10-03T19:42:05.733 回答
0

这段代码甚至可以编译,你没有构造函数默认值(没有字段)。这个:

public Continue(java.awt.Frame parent, boolean modal) {

和这个:

public Continue(int CUNOMBA, int COUNT, boolean CHECK, List NLIST){

这不会编译:

Continue ctn = new Continue();
于 2012-10-03T19:38:16.567 回答