Java变量覆盖
我有一个带有for的程序,它从Arraylist中提取字符串,拆分它们并将它们发送给工人类 工人阶级:Java变量覆盖,java,overwrite,Java,Overwrite,我有一个带有for的程序,它从Arraylist中提取字符串,拆分它们并将它们发送给工人类 工人阶级: public class WorkerRSR extends SwingWorker<String, Void>{ private static String urlFrames; private static String urlImg; public static int bool; public static int dist; public static int numI;
public class WorkerRSR extends SwingWorker<String, Void>{
private static String urlFrames;
private static String urlImg;
public static int bool;
public static int dist;
public static int numI;
public static int spra;
public static boolean isCoda;
public static int numCoda;
public static String algo;
public WorkerRSR(String urlImg, int dist, int numI, int spra, String algo, String urlFrames, boolean isCoda, int numCoda) {
this.urlImg=urlImg;
this.dist=dist;
this.numI=numI;
this.spra=spra;
this.algo=algo;
this.urlFrames=urlFrames;
this.isCoda = isCoda;
this.numCoda = numCoda;
//FIRST CHECK POINT
}
@Override
protected String doInBackground() throws Exception {
PanelRSR_LRSR.getProgessbar().setIndeterminate(true);
go();
return "";
}
@Override
protected void done() {
System.out.println("Algoritmo RSR esguito");
if(isCoda){
CreateOption.codaCont++;
System.out.println("RSR codaCont: "+CreateOption.codaCont);
if(CreateOption.codaCont==CreateOption.csize){
JOptionPane.showMessageDialog(null,"Coda Eseguita", "Attenzione",JOptionPane.WARNING_MESSAGE);
PanelRSR_LRSR.getProgessbar().setIndeterminate(false);
}
}
else{
PanelRSR_LRSR.getProgessbar().setIndeterminate(false);
JOptionPane.showMessageDialog(null,"Finito RSR", "Attenzione",JOptionPane.WARNING_MESSAGE);
}
}
public static void go() throws IOException{
System.out.println("ESEGUO RSR, attendi...");
//SECOND CHECK POINT
System.out.println("RSR n = "+numI+" codaCont: "+CreateOption.codaCont+" numCoda = "+numCoda);
while(true){
if(numCoda==CreateOption.codaCont)
break;
}
MakeRSR m=new MakeRSR();
String name = urlImg.substring(urlImg.lastIndexOf("\\"),urlImg.lastIndexOf("."));
String output=name.substring(1); //?
String urlOutput=urlFrames+"\\finalRSR\\"+name+"-"+algo+"-dist"+dist+"-n"+numI+"-N"+spra+".png";
m.RSR(urlImg,urlOutput,dist,numI,spra);
}
}
公共类WorkerRSR扩展SwingWorker{
私有静态字符串帧;
私有静态字符串urlImg;
公共静态文件;
公共静态区;
公共静态整数;
公共静态int spra;
公共服务和官方发展援助;
努姆科达公共图书馆;
公共静态字符串算法;
public WorkerRSR(字符串urlImg、int dist、int numI、int spra、字符串algo、字符串urlFrames、布尔isCoda、int numCoda){
this.urlImg=urlImg;
this.dist=dist;
this.numI=numI;
这个。spra=spra;
this.algo=algo;
this.urlFrames=urlFrames;
this.isCoda=isCoda;
this.numCoda=numCoda;
//第一检查点
}
@凌驾
受保护的字符串doInBackground()引发异常{
PanelRSR_LRSR.getProgesBar().setUndeterminate(true);
go();
返回“”;
}
@凌驾
受保护的void done(){
System.out.println(“Algoritmo-RSR-esguito”);
如果(isCoda){
codaCont++;
System.out.println(“RSR codaCont:+CreateOption.codaCont”);
if(CreateOption.codaCont==CreateOption.csize){
showMessageDialog(null,“Coda Esegita”,“Attentizione”,JOptionPane.WARNING_消息);
PanelRSR_LRSR.getProgesBar().setUndeterminate(false);
}
}
否则{
PanelRSR_LRSR.getProgesBar().setUndeterminate(false);
显示消息对话框(null,“Finito RSR”,“Attentizione”,JOptionPane.WARNING_消息);
}
}
公共静态void go()引发IOException{
System.out.println(“ESEGUO RSR,attendi…”);
//第二检查点
System.out.println(“RSR n=“+numI+”codaCont:“+CreateOption.codaCont+”numCoda=“+numCoda”);
while(true){
if(numCoda==CreateOption.codaCont)
打破
}
MakeRSR m=新的MakeRSR();
字符串名称=urlImg.substring(urlImg.lastIndexOf(“\\”),urlImg.lastIndexOf(“.”);
字符串输出=名称。子字符串(1);/?
字符串urlOutput=urlFrames+“\\finalRSR\\”+name+“-”+algo+“-dist”+dist+“-n”+numI+“-n”+spra+“.png”;
m、 RSR(urlImg、URLOUT、dist、numI、spra);
}
}
问题是这个类将被多次调用,每次它都会覆盖变量的先前值:如果我在第一个检查点检查它们,它们是不同的(可能是因为还需要进行第二次采集),但是在第二个检查点它们是相同的。
如何让它们保持不同?如果这些变量是由构造函数设置的,那么它们不应该是静态的。它们应该是实例变量,因此类的每个实例都可以有不同的值
public class WorkerRSR extends SwingWorker<String, Void>{
private String urlFrames;
private String urlImg;
private int bool;
private int dist;
private int numI;
private int spra;
private boolean isCoda;
private int numCoda;
private String algo;
public WorkerRSR(String urlImg, int dist, int numI, int spra, String algo, String urlFrames, boolean isCoda, int numCoda) {
this.urlImg=urlImg;
this.dist=dist;
this.numI=numI;
this.spra=spra;
this.algo=algo;
this.urlFrames=urlFrames;
this.isCoda = isCoda;
this.numCoda = numCoda;
//FIRST CHECK POINT
}
...
}
公共类WorkerRSR扩展SwingWorker{
私有字符串帧;
私有字符串urlImg;
私人住宅;
私人国际区;
私有国际努米;
私人int spra;
私有布尔isCoda;
努姆科达私人酒店;
私有字符串算法;
public WorkerRSR(字符串urlImg、int dist、int numI、int spra、字符串algo、字符串urlFrames、布尔isCoda、int numCoda){
this.urlImg=urlImg;
this.dist=dist;
this.numI=numI;
这个。spra=spra;
this.algo=algo;
this.urlFrames=urlFrames;
this.isCoda=isCoda;
this.numCoda=numCoda;
//第一检查点
}
...
}
您还应该将所有这些变量更改为私有变量。如果应该从类外访问它们,则应该通过getter方法访问它们。此外,访问修饰符是
public
首先,谢谢两个!)正如你所看到的,我是个新手,你真的帮了我很多!我要把静电消掉。我不需要从外部访问变量(这个类接收这些参数,然后做一些以图像保存结束的事情,所以没有get)@史蒂芬:你什么意思?我应该将samething更改为public吗?@pedro他可能是说您应该将所有变量更改为private。@pedro我的意思是数据封装是一种很好的做法,关键是属性只能在类内部修改。。公共修饰符使它们容易受到外部影响modification@pedro您的go
方法是静态的,因此它无法访问类的实例成员。我不知道你打算怎么用那种方法。也许它不应该是静态的。如果它应该是静态的,则需要WorkerRSR
类的实例才能访问它的实例成员。