首页 > 解决方案 > 处理函数什么都不做,只是冻结程序

问题描述

我正在研究处理中的寻路算法。如果我不画一条穿过绿点和红点之间路径的线,它可以工作,但如果我这样做,我有一个问题,如果我调用一个函数,程序除了冻结之外什么都不做,我不知道为什么。像素存储您绘制的内容,并且有各种各样的东西,在这个问题上无关紧要。当您将其粘贴到处理中时,按 ctrl+t 自动格式化它,以便您更好地理解它,但我敢打赌这是一个新手问题。

int[][] pixelss = new int[500][500];
void setup() {
  background(255);
  size(500, 500);}
int[][] badcoos = new int[500][500];
void golinego() {
  stroke(200, 200, 255);
  line(30, 30, 470, 470);
  int j = 30;
  int i = 30;
  while (dist(i, j, 470, 470) > 10) {
    stroke(0, 0, 180);
    circle(i, j, 1);
    if (pixelss[i+1][j+1]==0) {
        i++;j++;}
    if (pixelss[i][j]==1) {
      if (pixelss[i][j+1]==1) {
        if (pixelss[i+1][j]==0) {
          i++;}
      } else if (pixelss[i+1][j]==1) {
        if (pixelss[i][j+1]==0) {
          j++;}
      } else {
        i-=1;
        j-=1;}}}}
void draw() {
  stroke(0, 255, 0);
  fill(0, 255, 0);
  circle(30, 30, 10);
  stroke(255, 0, 0);
  fill(255, 0, 0);
  circle(470, 470, 10);
  if (mousePressed == true) {
    try {
      stroke(0);
      fill(0);
      circle(mouseX, mouseY, 2);
      pixelss[mouseX][mouseY] = 1;
      pixelss[mouseX+1][mouseY] = 1;
      pixelss[mouseX-1][mouseY] = 1;
      pixelss[mouseX][mouseY+1] = 1;
      pixelss[mouseX][mouseY-1] = 1;
      pixelss[mouseX+1][mouseY+1] = 1;
      pixelss[mouseX-1][mouseY+1] = 1;
      pixelss[mouseX+1][mouseY-1] = 1;
      pixelss[mouseX-1][mouseY-1] = 1;
    }catch(ArrayIndexOutOfBoundsException e) {}}}
void keyPressed() {
  if (key=='r') {
    pixelss = new int[500][500];
    badcoos = new int[500][500];
    background(255);}
  if (key==' ') {
    golinego();}
  if (key=='d') {
    background(0);
    for (int i = 0; i < 500; i++) {
      for (int j = 0; j < 500; j++) {
        if (pixelss[i][j]==1) {
          stroke(255);
          circle(i, j, 1);}}}}}

标签: javaprocessing

解决方案


当 ArrayIndexOutOfBoundsException 被捕获时,您至少应该打印一些东西。

看起来您正在使用某种 gui 库,请确保您在与 gui 不同的线程中进行任何处理,否则 gui 将变得无响应并像您描述的那样“冻结”。

https://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html


推荐阅读