From My Blog (http://bloglong123king.sourceforge.net/?p=386)
一、概述
有人说Processing(http://www.processing.org/)是一门语言,不过我认为它只是一个建立在Java语言之上的框架而已。Processing本身是基于Java开发的,我们编写的Processing脚本最后也会被改写成Java文件进行解释执行。
二、为什么说Processing语言本质上是Java语言?
我们在Processing自带的编辑器中编辑好一个项目,选择“导出项目”,我们能看到以下的导出目录结构:
我们看到,多个.pde格式的源码文件被合并成一个.java源码文件,最后生成一个jar文件。
我们再找一个代码行数简单的example来看一下pde文件和java文件对比:
Brightness.pde
- /**
- * Brightness
- * by Rusty Robison.
- *
- * Brightness is the relative lightness or darkness of a color.
- * Move the cursor vertically over each bar to alter its brightness.
- */
- int barWidth = 20;
- int lastBar = -1;
- void setup() {
- size(640, 360);
- colorMode(HSB, width, 100, width);
- noStroke();
- background(0);
- }
- void draw() {
- int whichBar = mouseX / barWidth;
- if (whichBar != lastBar) {
- int barX = whichBar * barWidth;
- fill(barX, 100, mouseY);
- rect(barX, 0, barWidth, height);
- lastBar = whichBar;
- }
- }
Brightness.java
- import processing.core.*;
- import processing.data.*;
- import processing.event.*;
- import processing.opengl.*;
- import java.util.HashMap;
- import java.util.ArrayList;
- import java.io.File;
- import java.io.BufferedReader;
- import java.io.PrintWriter;
- import java.io.InputStream;
- import java.io.OutputStream;
- import java.io.IOException;
- public class Brightness extends PApplet {
- /**
- * Brightness
- * by Rusty Robison.
- *
- * Brightness is the relative lightness or darkness of a color.
- * Move the cursor vertically over each bar to alter its brightness.
- */
- int barWidth = 20;
- int lastBar = -1;
- public void setup() {
- size(640, 360);
- colorMode(HSB, width, 100, width);
- noStroke();
- background(0);
- }
- public void draw() {
- int whichBar = mouseX / barWidth;
- if (whichBar != lastBar) {
- int barX = whichBar * barWidth;
- fill(barX, 100, mouseY);
- rect(barX, 0, barWidth, height);
- lastBar = whichBar;
- }
- }
- static public void main(String[] passedArgs) {
- String[] appletArgs = new String[] { "--full-screen", "--bgcolor=#666666", "--stop-color=#cccccc", "Brightness" };
- if (passedArgs != null) {
- PApplet.main(concat(appletArgs, passedArgs));
- } else {
- PApplet.main(appletArgs);
- }
- }
- }
我们发现,pde文件被原封不动地嵌入到了一个java文件中去了。
至此,我们有理由相信Processing其实只是Java语言的扩展而已。
三、怎样用eclipse编辑调试Processing程序?
刚开始尝试Processing时,我只能用打log的方式来调试,现在既然知道了Processing就是Java,我们就可以通过eclipse来调试Processing程序了。
我们先在eclipse中新建一个Java项目,创建一个test.java源码文件,照猫画虎地抄一下上面的Java源码:
- import processing.core.*;
- import processing.data.*;
- import processing.event.*;
- import processing.opengl.*;
- import java.util.HashMap;
- import java.util.ArrayList;
- import java.io.File;
- import java.io.BufferedReader;
- import java.io.PrintWriter;
- import java.io.InputStream;
- import java.io.OutputStream;
- import java.io.IOException;
- public class test extends PApplet {
- public void setup() {
- background(0);
- }
- public void draw() {
- fill(255,255,255);
- rect(0, 0, 400, 400);
- }
- static public void main(String[] passedArgs) {
- String[] appletArgs = new String[] { "--full-screen", "--bgcolor=#666666", "--stop-color=#cccccc", "test" };
- if (passedArgs != null) {
- PApplet.main(concat(appletArgs, passedArgs));
- } else {
- PApplet.main(appletArgs);
- }
- }
- }
这时eclipse会提示很多错误,那是因为我们没有包含processing的基础类库。
我们在Java项目上选择属性对话框(Preferences)->Java Build Path->Libraries->Add External Jars..,找到Processing解压目录下的core/library目录下的全部jar文件添加进来,问题就解决了。
进一步去除error及warning,得到最后代码:
- import processing.core.*;
- public class test extends PApplet {
- /**
- *
- */
- private static final long serialVersionUID = 8825792954966710768L;
- public void setup() {
- background(0);
- }
- public void draw() {
- fill(255,255,255);
- rect(0, 0, 400, 400);
- }
- static public void main(String[] passedArgs) {
- String[] appletArgs = new String[] { "--full-screen", "--bgcolor=#666666", "--stop-color=#cccccc", "test" };
- if (passedArgs != null) {
- PApplet.main(concat(appletArgs, passedArgs));
- } else {
- PApplet.main(appletArgs);
- }
- }
- }
设置一个断点按F11启动调试,或者Ctrl+F11启动运行一下,都OK。