使用Eclipse编写Processing程序的一些注意事项

本文介绍了使用Eclipse编写Processing程序的注意事项。作者因原生编译器不好用,查阅官方文档解决了示例代码无法运行的问题。文中详细说明了在Eclipse内创建可运行程序的步骤,还提及面向对象编程、通用函数使用及项目导出方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用Eclipse编写Processing程序的一些注意事项

最近要做一个使用processing的数据分析作业,安装好processing之后发现原生的编译器不够好用,于是有了把它放在Eclipse里写的念头。上网找了几篇教程后发现示例代码无法正确运行,而且都是比较早的文章,所以又去翻了一阵找到了processing关于这部分内容的官方文档看了看,问题顺利解决。不得不说,官方文档永远是最规范完整的解释。现把官方文档的链接和个人的简化翻译版本贴上来,以方便有同样需要的朋友。

ps:更准确的说,这篇官方文档主要是给从Processing中转到Eclipse的人的指南,但至少我们仍能从这篇文档初步了解二者间的不同。

官方文档:

https://processing.org/tutorials/eclipse/

以下是个人对这篇文档的解释:

创建能在Eclipse内正确运行的程序(以下图片来源于官网)

第一步,在Eclipse中创建一个java项目

在这里插入图片描述
如图所示,创建了一个名为UsingProcessing的类,其中创建主方法是一定要选的,不选的话之后也要添加上去,在后面的一步操作中很关键。
我们有了这样的代码:

public class UsingProcessing {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

    }

}

现在要导入Processing的core
点击
File > Import > General > File System
点next
在上面那个Browse中选择
processing-3.5.3中的core中的Library文件夹,点确定
选中右侧的core.jar
再点下面的Browse,选中当前java 项目,点Finish,结果大概是这样:
在这里插入图片描述
现在还需要一些工作:选中core.jar,右键,选Build Path 中的Add to Build Path
在这里插入图片描述
结果:
在这里插入图片描述
现在我们已经成功将core.jar导入到当前项目中(注意:之后每次创建新项目时也都要这么操作一番才可以)

启动主类(原文里叫 Client Class,即客户端类)

一个Processing窗体是java中的一种PApplet的程序,它也是一个java类,所以我们需要有一个类来成为PApplet(也就是继承PApple,此时是上文的UsingProcessing类)。注意:我们需要import语句导入这个包,操作和导入一般的包一样。

import processing.core.*;

下面有一条特别需要注意的点:如果之前没有选创建main方法,则要创建一个

public static void main(String args[])
{
}

若已创建,则请忽略这一步。

有了main方法后,要在方法体里添加一句:

PApplet.main("UsingProcessing");

上面这句是类在default package里面的写法(引号内是类名)

自建包中的写法是:

PApplet.main("packageName.ClassName");

(注意:packageName是你创建的包的名字,ClassName就是类名啦)

ps:很久之前的processing版本不添加上面那句似乎也可以,至少在我查到的前几年博客中没有。

在main方法后添加三个方法:settings(), setup(), and draw()
setup()和draw()的用法和在processing原生编译器中的相同,唯一的不同是:我们需要把设定窗体大小的方法size()在settings()中调用,settings()中能写的方法也只有size(),且settings()要写在前两个之前。
在setup()中设置被画对象的颜色,draw()中设置被画的对象,如下例:

import processing.core.PApplet;

public class UsingProcessing extends PApplet{

    public static void main(String[] args) {
        PApplet.main("UsingProcessing");
    }

    public void settings(){
        size(300,300);
    }

    public void setup(){
        fill(120,50,240);
    }

    public void draw(){
        ellipse(width/2,height/2,second(),second());
    }

}

如果run时有选项,要选择 run as java application,不能选run as applet,否则无法正常运行

简短版本

1:创建一个java 项目
2:导入core.jar,并add to build path
3:创建一个新的类,继承PApplet,加上import语句
4:在main()方法内添加PApplet.main(“YourClassName”);
5:在main()方法后添加public void settings(), public void setup(), 和public void draw()这三个方法
6:在setting()中调用size(),并在setup()和draw()中添加内容

用面向对象的方式编写processing程序

以下这个例子是面向对象的,包含一个名为“stripe”的非主类。注意:在Processing中,所有的类都被当作PApplet的内部类,因此我们在继承了PApplet的类中可以直接调用PApplet的变量(如width 和 height)与方法(如rect() )
首先我们搭一个名为MyProcessingSketch的主类的框架

import processing.core.*;

public class MyProcessingSketch extends PApplet {
  //	An array of stripes
  Stripe[] stripes = new Stripe[50];
  
  public static void main(String[] args){
    PApplet.main("MyProcessingSketch");
  }

  public void settings(){
    size(200,200);
  }


  public void setup() {
    // Initialize all "stripes"
    for (int i = 0; i < stripes.length; i++) {
      stripes[i] = new Stripe();
    }
  }

  public void draw() {
    background(100);
    // Move and display all "stripes"
    for (int i = 0; i < stripes.length; i++) {
      stripes[i].move();
      stripes[i].display();
    }
  }
}

第二步,创建一个叫Stripe的类。
在写入代码时,你会发现有许多错误
在这里插入图片描述

我们可以发现,错误都出现在调用PApplet的变量和方法中,这是因为现在的这个类与上例不同,不是PApplet的内部类,但Stripe不是PApplet,不能继承PApplet。
此时我们需要在Stripe类内创建一个PApplet的实例,通过这个实例来访问

public class Stripe {
  PApplet parent; // The parent PApplet that we will render ourselves onto
// Draw stripe
  void display() {
    parent.fill(255,100);
    parent.noStroke();
    parent.rect(x,0,w,parent.height);
  }

在构造方法中,我们要初始化这个parent实例

Stripe(PApplet p) {
    parent = p;

整个代码如下

import processing.core.PApplet;

public class Stripe {
  float x;       // horizontal location of stripe
  float speed;   // speed of stripe
  float w;       // width of stripe
  boolean mouse; // state of stripe (mouse is over or not?)
  PApplet parent; // The parent PApplet that we will render ourselves onto

  Stripe(PApplet p) {
    parent = p;
    x = 0;              // All stripes start at 0
    speed = parent.random(1);  // All stripes have a random positive speed
    w = parent.random(10,30);
    mouse = false;
  }

  // Draw stripe
  void display() {
    parent.fill(255,100);
    parent.noStroke();
    parent.rect(x,0,w,parent.height);
  }

  // Move stripe
  void move() {
    x += speed;
    if (x > parent.width+20) x = -20;
  }
}

最后还要把主类中调用的Stripe类构造方法修改,在括号内加上this,表示当前的PApplet实例是主类外部继承的这个

stripes[i] = new Stripe(this);

此外,java没有color数据类型,因此原来定义颜色的类型color应改成int

color pink = color(255,200,200);//原来的写法
int pink = color(255,200,200);//现在的写法(在主类中)
int pink = parent.color(255,200,200);//在非主类中的写法

通用的一些函数

Processing中的很多函数在Eclipse也都有,但语法上有些不同
如鼠标事件函数,包括 mouseClicked(), mousePressed(), mouseDragged(), 和 mouseWheel().
这些方法写在setup()和draw()中时和原来一样,只不过声明时要加上public修饰符

void mousePressed() {
  if (value == 0) {
    ...
}//processing中写法
public void mousePressed() {
  if (value == 0) {
    ...
}//java(Eclipse)中写法

以上过程适用于鼠标,键盘以及所有的事件驱动函数

导出项目

导出项目的方法和一般的java项目相同,详情参考:
How to export a runnable .jar in Eclipse

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值