【问题标题】:Processing "Usage: PApplet [options] <class name> [sketch args]"处理“用法:PApplet [options] <class name> [sketch args]”
【发布时间】:2016-10-18 03:52:03
【问题描述】:

每次我编译我的代码时都会收到这条消息,“用法:PApplet [options] [sketch args] 有关说明,请参阅 PApplet 的 Javadoc。” 我正在使用的代码是通过闪存驱动器从我的旧计算机导入的,并且在该计算机上运行良好。当我将文件放入工作区后尝试从 src 打开文件时,它并不认为它是一个项目,因此我将它放入一个新的处理项目中。所以基本上我不确定我是否安装了错误的处理或代码中的错误,但我现在收到这个错误,这很烦人,因为我想处理这个旧项目。代码如下:

package tests;

import processing.core.PApplet;
import processing.core.PFont;
import processing.core.PImage;
import java.util.Random;

public class test1 extends PApplet {
    PImage background;
    PImage mole;
    PImage mallet1;
    PImage mallet2;

    PFont f;
    public int timer;
    public int startTime;
    public int gameTime;
    public int startGameTime;

    int score = 0;
    Random rnd = new Random();
    boolean mouseP = false;
    int life = 3;

    Mole mole1;
    Mole mole2;
    Mole mole3;
    Mallet mallet;
     enum GameState {
            MENU,
            RUNNING,
            RUNNING2
       }
     static GameState currentState;

    public void setup() {
        size(1000, 800);
        background = loadImage("background.png");
        currentState = GameState.MENU;
        mole = loadImage("mole.png");
        mole1 = new Mole(mole);
        mole2 = new Mole(mole);
        mole3 = new Mole(mole);
        f = createFont("comic.tff",16,true);
        textFont(f,36);
    }

     public void draw() {

            switch(currentState){
            case MENU:
                drawMenu();
                startTime = millis();
                timer = 0;
                life = 3;
                gameTime = millis();
                cursor(CROSS);
                break;
            case RUNNING:
                drawRunning();
                break;
            case RUNNING2:
                drawRunning2();
                gameTime = millis() - startGameTime;

                break;

            }
        }

    public void drawRunning() {
        clear();
        background(background);

        if(timer < 60000){
        mallet2 = loadImage("mallet2.png");
        timer = millis();

        background(background);
        mole1.drawMole();
        mole1.collision(mallet);
        timer = millis() - startTime;
        mallet1 = loadImage("mallet1.png");
        mallet = new Mallet(mallet1, mouseX, mouseY);

        fill(255,255,255);
        text("Time: " + ((60 - timer / 1000)), 850, 50);

        if (mouseP){
            mallet.drawMallet(mallet2, mouseX, mouseY);
        }
        else {
            mallet.drawMallet(mallet1, mouseX, mouseY);
        }
        if(timer > 60000){
            fill(255,255,255);
            text("Game over!" , background.width/2 - 100, background.height/2);

        currentState = GameState.MENU;

        }
        noCursor();
        text("Score: " + score ,25,50);
        }

    }

    public void drawRunning2() {
    clear();
    mallet1 = loadImage("mallet1.png");
    mallet = new Mallet(mallet1, mouseX, mouseY);


    mallet2 = loadImage("mallet2.png");

    background(background);

    timer = millis() - startTime;

    text("Life: " + life ,25,50);

    noCursor();

    text("Time: " + (gameTime / 1000), 825, 50);
    if(life <= 0){
        mole1.dead = true;
        mole2.dead = true;
        mole3.dead = true;
        text("Game over!" , background.width/2 - 100, background.height/2);

        if(mouseP){

            currentState = GameState.MENU;
            timer = 0;
            gameTime = 0;
            startGameTime = millis();
        }

    }

    if (timer < 2000){
        if (!mole1.dead){
            mole1.drawMole();
            mole1.collision(mallet);
        }
        if (!mole3.dead){
            mole3.drawMole();
            mole3.collision(mallet);
        }
        if (!mole2.dead){
            mole2.drawMole();
            mole2.collision(mallet);
        }
        if (mouseP){
            mallet.drawMallet(mallet2, mouseX, mouseY);
        }
        else {
            mallet.drawMallet(mallet1, mouseX, mouseY);
        }
    }
    else {
        startTime = millis();
        if (!mole1.dead || !mole2.dead || !mole3.dead) {
            life --;
        }
        if (life > 0){
            mole1.dead = false;
            mole2.dead = false;
            mole3.dead = false;

            mole1.xPos = rnd.nextInt(925);
            mole1.yPos = rnd.nextInt(725);
            mole3.xPos = rnd.nextInt(925);
            mole3.yPos = rnd.nextInt(725);
            mole2.xPos = rnd.nextInt(925);
            mole2.yPos = rnd.nextInt(725);

            }

        }
    }

    public void drawMenu(){
        clear();
        background(142,22,178);

        fill(165, 119, 249);
        rect(250, 150, 500, 200 );
        fill(255,255,255);
        text("Time Mode", 375, 270);
        fill(165, 119, 249);
        rect(250, 450, 500, 200 );
        fill(255,255,255);
        text("Survival Mode", 375, 570);

    }

            public void mousePressed()
            {
                mouseP = true;

                if( currentState == GameState.MENU && mouseX > 250 && mouseX < 750 && mouseY > 150 && mouseY < 350){
                    currentState = GameState.RUNNING;
                }
                if( currentState == GameState.MENU && mouseX > 250 && mouseX < 750 && mouseY > 450 && mouseY < 650){
                    currentState = GameState.RUNNING2;
            }

            }
                public void mouseReleased()
                {
                mouseP = false;
                }

    public class Mallet{
        PImage mallet1;
        PImage mallet2;
        float xPos1;
        float yPos1;

        public Mallet(PImage mallet1, float xPos1, float yPos1){

            this.mallet1 = mallet1;
            this.xPos1 = xPos1;
            this.yPos1 = yPos1;
        }

        public void drawMallet(PImage mallet1, float xPos1, float yPos1){
            image(mallet1, xPos1 - 40, yPos1 - 60);
        }
    }
    public class Mole{
        PImage Mole;
        float xPos;
        float yPos;
        boolean dead = false;

        public Mole(PImage mole){       
            this.Mole = mole;
            this.xPos = rnd.nextInt(925);
            this.yPos = rnd.nextInt(750);
        }


        public void drawMole(){
            if (dead == true) {
                this.xPos = rnd.nextInt(1000 - mole.width / 2);
                this.yPos = rnd.nextInt(800 - mole.height);
                dead = false;
            }
            image(Mole, xPos, yPos);    
        }   

        public void collision(Mallet m){
            if(
                    mouseP == true &&
            mouseX > xPos && mouseX < xPos + mole.width && mouseY > yPos && mouseY < yPos + mole.height){
                score ++;
                dead = true;
            }
        }
        }
    }

【问题讨论】:

  • 文件上还有 2 个错误描述资源路径位置类型存档所需库:项目“测试”中的“src/tests/library/export.txt”无法读取或无效ZIP 文件测试构建路径构建路径问题在解决构建路径错误之前无法构建项目测试未知的 Java 问题

标签: java eclipse processing


【解决方案1】:

我建议先做一些较小的工作。

从一个新项目开始,然后开始工作:

public class ProcessingTest extends PApplet{

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

    @Override
    public void draw() {
        background(0);
        fill(255, 0, 0);
        ellipse(100, 100, 100, 100);
    }

    public static void main (String... args) {
        ProcessingTest pt = new ProcessingTest();
        PApplet.runSketch(new String[]{"ProcessingTest"}, pt);
    }
}

这将测试您是否正确设置了处理依赖项。如果您遇到困难,那么您将能够提出更具体的问题。

在您开始工作后,您可以在工作示例中添加一小段代码,直到它停止工作,这再次允许您提出更具体的问题。这一切都是为了缩小问题范围:您的错误可能与字体无关,那么为什么您的代码包含字体逻辑?也就是说,请发MCVE。

如果您再次卡住,请尝试更具体地说明您的错误:您确定它是在编译期间发生的,还是在您尝试运行时发生的?它在哪条线上?您使用的是什么版本的处理?你是如何运行你的代码的? (我没有看到main() 方法?)

您还应该尝试使用正确的格式(缩进)和命名约定(类名以大写字母开头,方法和变量以小写字母开头)。这将帮助我们阅读您的代码并帮助您发现错误。

我还要说,将 eclipse 项目从一台计算机复制到另一台计算机往往比它的价值更麻烦。除非您的所有依赖项都在完全相同的位置,否则您将遇到问题。相反,我建议创建一个新项目并且只复制代码。

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,在 Intellij 中,有一个简单的解决方案。您在代码中使用package tests。您应该将tests.test1 添加到您的Program arguments。

    从右上角转到Edit Condiguration &gt; Program arguments。

    【讨论】:

    • 超级有帮助,谢谢。但是你能详细说明为什么会这样吗?在我的所有其他项目中,我从来不需要将 package.name 添加到程序参数中。然后,看似随机,我的最新项目突然需要它。有什么相关的吗?
    【解决方案3】:

    我逐字复制了您的代码,为了让它运行,我必须唯一添加以下内容:

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

    您必须从main()1 调用对象。请注意,我使用的是 Eclipse。

    由于我没有使用 PDE,我还必须将呼叫转移到 size() 到 settings()。

        public void settings() {
            size(1000, 800);
        }
    

    否则,在 Eclipse 中,您会收到此错误:

    When not using the PDE, size() can only be used inside settings().
    Remove the size() method from setup(), and add the following:
    public void settings() {
      size(1000, 800);
    }
    java.lang.IllegalStateException: size() cannot be used here, see https://processing.org/reference/size_.html
        at processing.core.PApplet.insideSettings(PApplet.java:949)
        at processing.core.PApplet.size(PApplet.java:2018)
        at moletest.setup(moletest.java:55)
        at processing.core.PApplet.handleDraw(PApplet.java:2432)
        at processing.awt.PSurfaceAWT$12.callDraw(PSurfaceAWT.java:1547)
        at processing.core.PSurfaceNone$AnimationThread.run(PSurfaceNone.java:313)
    

    一旦我这样做了,PApplet 就会运行并完美地显示第一个窗口。

    但是,由于缺少一些资源,我(可以理解)得到以下错误:

    The file "background.png" is missing or inaccessible, make sure the URL is valid or that the file has been added to your sketch and is readable.
    The file "mole.png" is missing or inaccessible, make sure the URL is valid or that the file has been added to your sketch and is readable.
    "comic.tff" is not available, so another font will be used. Use PFont.list() to show available fonts.
    

    总而言之,您的代码似乎没问题。但是,如果您更改编译环境,则可能需要进行一些小的更改。


    脚注

    1见How to write and run processing code in Eclipse? How to make Eclipse a second home for processing?

    1. 在 Java 中需要main(String args[]); 才能说从这里开始。 Processing 有一个预处理器可以为您执行此操作,但在 Eclipse 中您必须自己添加它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-04
      • 2013-08-01
      • 2020-11-08
      相关资源
      最近更新 更多