在以下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阵列。这有意义吗?