0

我在这里完全不知所措。我有一个方法通过包含自定义 FileNode 类的 TreePaths 向量,并提取每个最后一个节点中包含的文件。结果是 Vector 中所有文件名的打印列表。我有一个for循环来增加它,它工作得很好,但我把它改成了一个while循环,让我有多个页面。现在,由于某种原因,它只打印最后 11 个文件。

我已经弄清楚是什么原因造成的,但我不知道为什么或如何解决它。我添加了行以打印到控制台“lineCount”和“printPaths.size()”,发现 lineCount 一直在递增,直到达到 55,然后恢复到 15 并继续递增。这些名称直到恢复到 15 才真正开始打印。

我已经在调试模式下逐步完成了它,它通过了 55 次打印循环,将代码返回给打印函数,告诉它它是打印页面的一部分,然后它进入我不使用的打印方法有源代码,当我退出时,它又回到循环的开头,而 lineCount 为 14。真正奇怪的部分是它打印出 11 个文件时,即使根据程序它甚至还没有看过 Vector 的那部分。

如果有人知道是什么原因造成的,我将非常感谢您的帮助。这是处理打印列表的代码块。希望这就足够了。

        lineCount = 13;
    int lineSpacing = 14;
    g.setFont(new Font("Dialog", Font.PLAIN, 10));
    boolean color = true;
    if (summ) {
        g.drawString(((TreePath) printPaths.get(0)).getPathComponent(
                ((TreePath) printPaths.get(0)).getPathCount() - 3)
                .toString()
                + " : "
                + ((TreePath) printPaths.get(0)).getPathComponent(
                        ((TreePath) printPaths.get(0)).getPathCount() - 5)
                        .toString(), 36, lineCount * lineSpacing);
        lineCount++;
        //for (int j = 1; j < printPaths.size(); j++) {
        while((printPaths.size()>1) && lineCount<55){
            String type = ((TreePath) printPaths.get(1)).getPathComponent(
                    ((TreePath) printPaths.get(1)).getPathCount() - 5)
                    .toString();
            String date = ((TreePath) printPaths.get(1)).getPathComponent(
                    ((TreePath) printPaths.get(1)).getPathCount() - 3)
                    .toString();
            String typeU = ((TreePath) printPaths.get(0))
                    .getPathComponent(
                            ((TreePath) printPaths.get(1)).getPathCount() - 5)
                    .toString();
            String dateU = ((TreePath) printPaths.get(0))
                    .getPathComponent(
                            ((TreePath) printPaths.get(1)).getPathCount() - 3)
                    .toString();
            if (!(type == typeU) && (date == dateU)) {
                lineCount++;
                g.setColor(c1);
                g.drawString(date + " : " + type, 36, lineCount
                        * lineSpacing);
                lineCount++;
            }
            if(color)
                g.setColor(c1);
            else
                g.setColor(c2);
            g.drawString(((TreePath) printPaths.get(1))
                    .getLastPathComponent().toString(), 54, lineCount
                    * lineSpacing);
            color=!color;
            lineCount++;
            printPaths.remove(0);
            System.out.println(printPaths.size());
            System.out.println(lineCount);
        }
    }
4

2 回答 2

1

您似乎正在从集合 printPaths 中删除,同时向前迭代它。如果是这样,我对这可能会搞砸并不感到惊讶。考虑改用迭代器。您似乎也正在执行程序的这个逻辑部分,这是一个很大的禁忌。在此方法之外执行您的逻辑,因为您无法完全控制该方法何时或什至会触发。

于 2011-11-18T23:19:37.843 回答
0

我最终发现,Java 自己很好地实现了分页,而不需要我尝试做的事情。

于 2011-11-23T19:40:16.013 回答