【问题标题】:showing error in java在java中显示错误
【发布时间】:2016-12-26 14:25:11
【问题描述】:

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

public Founder() {
    initComponents();

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

【问题讨论】:

  • @rmlan 所以你有代码吗?我在做netbeans
  • 所以你也误解了这个网站的运作方式。我们不是代码编写服务。
  • 我想改进我的代码。我问您此代码中出现的错误并且它不起作用,因此如果您在此代码中发现错误,请更新代码,我不要求您在这里提供您自己的代码。我对这个网站没有误解。
  • 为什么你认为你的程序有机会记住最后一次运行?您甚至明确地将计数器设置为 0 并将其增加 1。
  • @rmlan,我相信它是一个有效的构造函数,因为它被命名为 founder 并带有小 f(类名应该以大写字母开头),从而违反了命名约定。

标签: java


【解决方案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 开始计数。

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 我已经完成了 C=0 。但它仍然没有显示正确的输出。
    • 你明白我的回答了吗?
    • 所以你想创建一个数据库?
    • 数据库是一个选项。我绝对认为它属于答案“这些概念非常先进。在尝试这样的事情之前,你应该做一些基本的编程练习。”
    • @OleV.V.当我检查时,我在 Android 应用程序中也发现了同样的情况。它还显示了一些代码。但是这些代码在 Netbeans 中不起作用
    【解决方案3】:

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

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

    3. 序列化还提供了一种持久存储方式。 您可以为要存储的每条数据创建一个实现 Serializable 的类,其中包含一个字段。然后您可以将整个类写到一个文件中,稍后您可以将其读回。在此处了解序列化:https://www.tutorialspoint.com/java/java_serialization.htm

    【讨论】:

    • 好的。谢谢,所以如果没有数据库,有什么可用的选项吗?
    • 对于这些选项我们不需要创建数据库。
    猜你喜欢
    • 1970-01-01
    • 2016-02-18
    • 2017-02-24
    • 1970-01-01
    • 2021-09-18
    • 2021-05-02
    • 1970-01-01
    • 2014-02-21
    • 1970-01-01
    相关资源
    最近更新 更多