在java中显示错误

时间:2016-12-26 14:25:11

标签: java

我想创建一个应用程序,向用户显示他打开或使用该软件的次数。为此,我创建了以下代码。但它没有显示正确的输出:当我首先运行应用程序时它显示1然后第二次运行它时它也显示1

public Founder() {
    initComponents();

    int c=0;
    c++;
    jLabel1.setText(""+c);
    return;
}

3 个答案:

答案 0 :(得分:1)

第一次运行代码时,与其相关的数据将存储在系统的RAM中。然后,当您关闭应用程序时,与RAM相关的所有数据都将从RAM中删除(为简单起见,我们假设它将被删除,但实际上它有点不同)。

现在,当您第二次打开应用程序时,新数据将存储在RAM中。此新数据包含代码的起始状态。所以c的值设置为0(c = 0)。

如果要记住数据,则必须将其存储在永久存储(例如系统硬盘)中。但我认为你是初学者。这些概念非常先进。在尝试这样的事情之前,你应该做一些基本的编程练习。

答案 1 :(得分:1)

在这里你需要将它存储在永久基础上。

  1. 引用属性类永久存储数据:https://docs.oracle.com/javase/7/docs/api/java/util/Properties.html
  2. 您也可以使用ex的数据文件。 *.txt*.csv

  3. 序列化还提供了持久存储的方法。 您可以创建一个实现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开始计数。