我想创建一个应用程序,向用户显示他打开或使用该软件的次数。为此,我创建了以下代码。但它没有显示正确的输出:当我首先运行应用程序时它显示1
然后第二次运行它时它也显示1
。
public Founder() {
initComponents();
int c=0;
c++;
jLabel1.setText(""+c);
return;
}
答案 0 :(得分:1)
第一次运行代码时,与其相关的数据将存储在系统的RAM中。然后,当您关闭应用程序时,与RAM相关的所有数据都将从RAM中删除(为简单起见,我们假设它将被删除,但实际上它有点不同)。
现在,当您第二次打开应用程序时,新数据将存储在RAM中。此新数据包含代码的起始状态。所以c的值设置为0(c = 0)。
如果要记住数据,则必须将其存储在永久存储(例如系统硬盘)中。但我认为你是初学者。这些概念非常先进。在尝试这样的事情之前,你应该做一些基本的编程练习。
答案 1 :(得分:1)
在这里你需要将它存储在永久基础上。
您也可以使用ex的数据文件。 *.txt
,*.csv
序列化还提供了持久存储的方法。 您可以创建一个实现Serializable的类,其中包含要存储的每个数据的字段。然后你可以将整个类写到一个文件中,然后你可以在以后阅读它。在这里了解序列化:https://www.tutorialspoint.com/java/java_serialization.htm
答案 2 :(得分:1)
我不确定我是在帮你还是给你一大堆新问题和未解决的问题。以下将在程序的工作目录(可能是存储Founder
文件的根二进制目录中)存储类useCount.txt
的文件中构建类.class
的次数。 。下次运行程序时,它将从文件中读取计数,添加1并将新值写回文件。
static final Path counterFile = FileSystems.getDefault().getPath("useCount.txt");
public Founder() throws IOException {
initComponents();
// read use count from file
int useCount;
if (Files.exists(counterFile)) {
List<String> line = Files.readAllLines(counterFile);
if (line.size() == 1) { // one line in file as expected
useCount = Integer.parseInt(line.get(0));
} else { // not the right file, ignore lines from it
useCount = 0;
}
} else { // program has never run before
useCount = 0;
}
useCount++;
jLabel1.setText(String.valueOf(useCount));
// write new use count back to file
Files.write(counterFile, Arrays.asList(String.valueOf(useCount)));
}
这不是最优雅也不是最强大的解决方案,但它可能会帮助您入门。如果您在另一台计算机上运行该程序,它将找不到该文件,并将从0开始计数。