Java:数组在类之间传输,但值不进行



在以下Java代码中,我在一个类中填充了一个arraylist,然后在另一个类中使用arraylist。但是,数组转移,但充满了无效值。我已经讨论了代码,并且阵列列表确实被填充了,但其值不会传输。

第一类:

public String[] log = new String[100];
public ArrayList llog= new ArrayList();
int arraypos= 0;
public void nativeKeyPressed(NativeKeyEvent e) {
  if (e.getKeyCode() == NativeKeyEvent.VK_ESCAPE) {
    GlobalScreen.unregisterNativeHook();
  }
  System.out.println(" " + NativeKeyEvent.getKeyText(e.getKeyCode()).toLowerCase() + " ");
  llog.add(NativeKeyEvent.getKeyText(e.getKeyCode()).toString().toLowerCase());
  System.out.println("list:" + llog.get(arraypos));
  arraypos = arraypos + 1;  
}
public ArrayList getStrokes (){
  return this.llog;
}

第二类:

public void TeslaTimer()
{
  int delay = 10000; //1 sec = 1000 
  int period = 90000; // repeat every sec.
  Timer timer = new Timer();
  timer.scheduleAtFixedRate(new TimerTask()
  {
    @Override
    public void run()
    {
      GlobalKeyListener keyl = new GlobalKeyListener();
      ArrayList keylog=keyl.getStrokes();
      //TeslaLogger savetoFile = new TeslaLogger();
      //savetoFile.TeslaLogger(keylog);
      System.out.println("Ring Ring");
      for(int i =0; i < keylog.size(); i++){
        System.out.println(keylog.get(i));
      }
    }
  }, delay, period);
}

TeslaTimer中的 GlobalKeyListener实例与您添加到的实例不是相同的实例。

您必须使用run()方法可用的GlobalKeyListener的实例,或者使用static变量(就像全局变量)。


这是您可以用来使其起作用的单身模式:

public class GlobalKeyListener {
    // rest of class omitted
    private static GlobalKeyListener INSTANCE = new GlobalKeyListener();
    public static GlobalKeyListener getInstance() { 
        return INSTANCE;
    }
}

然后,无论您需要在任何地方使用它:

GlobalKeyListener globalKeyListener = GlobalKeyListener.getInstance();
globalKeyListener.getStrokes(); // etc

所有代码将使用相同实例。

您创建一个新的globalKeyListener,这使得globalKeyListener的实例。该类的这个实例将运行该行:public arraylist llog = new ArrayList();(因此创建一个没有元素的新数组列表)。然后,您尝试获取数组列表keylog = keyl.getstrokes(),并给出了空数组列表。如果您希望数组列表在类的实例之间持续存在,请尝试使LLOG数组列表静态。这将使您的头等舱的所有实例共享LLOG阵列。这有意义吗?

相关内容

  • 没有找到相关文章

最新更新