java - JFrame 显示黑屏,右上角有一个白色的小矩形

标签 java swing awt

我正在创建一个程序,该程序读取包含一系列 x/y 坐标的文本文件,并在每个坐标应放置的位置放置一个小方 block 。该程序还必须处理另一个文本文件,该文件具有一系列 x/y 坐标和一个以分贝表示信号强度的 double 值。当我启动该程序时,它会显示一个黑色屏幕,左上角有一个白色小矩形。我的代码有什么问题?我在控制台中没有收到任何错误。几乎可以肯定,问题出在我的第二个主 for 循环中的 coveRage.java 文件中。

what the program displays

第一个文本文件...

500.0 500.0
250.0 250.0

第二个文本文件

1000.0 2500.0 -143.2
1213.0 2132.0 -100.7

主.java

public class Main {
    public static void main(String[] args) throws FileNotFoundException {
        File towers = new File("towers.txt");
        File readings = new File("readings.txt");
        //System.out.println(new File(".").getAbsoluteFile());
        Scanner towers1 = new Scanner(towers);
        Scanner readings1 = new Scanner(readings);
        ArrayList<Integer> towerPos = new ArrayList<Integer>();
        ArrayList<Integer> readingPos = new ArrayList<Integer>();

        while(towers1.hasNextDouble()) {
            towerPos.add((int)towers1.nextDouble());
        }
        towers1.close();

        while(readings1.hasNextDouble()) {
            readingPos.add((int)readings1.nextDouble());
        }
        readings1.close();


        JFrame f = new JFrame("Cellphone Coverage");
        f.setVisible(true);     
        f.setSize(500, 500);
        f.setDefaultCloseOperation(
            JFrame.EXIT_ON_CLOSE);
        f.add(new CoveRage(towerPos, readingPos));

    }
}

coverRage.java

public class CoveRage 
extends JComponent {

    private ArrayList<Integer> readingPos;
    private ArrayList<Integer> towerPos;
    ArrayList<Integer> towerPosis = new ArrayList<Integer>();
    ArrayList<Integer> distances = new ArrayList<Integer>();
    int xAxis;
    int yAxis;

    public CoveRage(ArrayList<Integer> towerPos, ArrayList<Integer> readingPos) {
         this.towerPos = towerPos;
         this.readingPos = readingPos;
        }

    public void paintComponent(Graphics g) {
        Graphics2D g2 = (Graphics2D) g.create();
        for (int j = 0; j < towerPos.size(); j += 2) {
            int xAxis = towerPos.get(j) / 10;
            int yAxis = towerPos.get(j + 1) / 10;
            towerPosis.add(xAxis); // adds to list for checking distance between tower and signal
            towerPosis.add(yAxis);
            g2.setColor(Color.black);
            g2.fillRect(xAxis, yAxis, 5, 5);
        }

        for (int i = 0; i < readingPos.size(); i =+ 3) { // for there are still readings left take in 3 values and repeat
            int xAxiss = readingPos.get(i) / 10; // grabs x axis of reading
            int yAxiss = readingPos.get(i + 1) / 10; // grabs y axis of reading
            int sigNal = readingPos.get(i + 2); // grabs signal strength of reading
                for (int k = 0; k < towerPosis.size(); k=+2) { // for there are still readings in towerPosis 
                    int distance = (int) Math.sqrt(Math.pow(towerPosis.get(k)-xAxiss, 2)+(Math.pow(towerPosis.get(k + 1)-yAxiss, 2))); // calulates distance between tower and reading
                    distances.add(distance); // add distance to arrayList
                    int leastDist = distances.get(0);
                    for (int u = 0; u < distances.size(); u++) { // for there are still distance
                        if (distances.get(u) < leastDist) {
                            leastDist = distances.get(u);
                        }
                        int expected = (int) ((int) 40*(Math.log10(1.0/leastDist)));
                        if (sigNal >= expected) {
                            g2.setColor(Color.green);
                            g2.fillRect(xAxiss, yAxiss, 5, 5);
                        } else if (sigNal <= expected - 9) {
                            g2.setColor(Color.red);
                            g2.fillRect(xAxiss, yAxiss, 5, 5);
                        }
                    }
            }
        }
    }
}

最佳答案

k = +2 导致了(多个)无限循环,这与说 k = 2 相同,所以 k 从不增加大小

如果你把所有的 = + 改成 += 就可以了

enter image description here

关于java - JFrame 显示黑屏,右上角有一个白色的小矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33381335/

相关文章:

java - 基于 Java 的应用程序的 GUI 测试工具

模拟人类鼠标移动的Java Robot类

java - 如何在Java中旋转矩形?

java - BeanDefinitionStoreException : IOException parsing XML document from class path resource [applicationContext]

java - log4j2 自定义附加程序不会停止/退出

java - 如何编辑Weblogic启动脚本来启用JMX?

java - 如何只填充圆角矩形的颜色并将其保存在 Java 中的 var 中

java - 主题切换后 Intellij 插件 JBTabbedPane UI 被替换

java - 如何通过 SSH 连接在 Linux 上保持运行程序?

java - 使用 LayoutManager 面板不显示在 JFrame 中