【问题标题】:Why am I getting a NullPointerException for strokeWeight() in Processing.py?为什么我在 Processing.py 中遇到 strokeWeight() 的 NullPointerException?
【发布时间】:2021-05-19 08:34:52
【问题描述】:

快速免责声明:我有点新手,所以这个问题可能只是我没有看到明显的问题,但基本上是在我跑步时

def setup():
    size(400,400)

def test():
    strokeWeight(5)
    circle(100, 100, 100)

test()

在处理中我收到以下错误:

processing.app.SketchException: java.lang.NullPointerException
at processing.core.PApplet.strokeWeight(PApplet.java:14431)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.python.core.PyReflectedFunction.__call__(PyReflectedFunction.java:188)
    at org.python.core.PyReflectedFunction.__call__(PyReflectedFunction.java:206)
    at org.python.core.PyObject.__call__(PyObject.java:497)
    at org.python.core.PyObject.__call__(PyObject.java:501)
    at org.python.core.PyMethod.__call__(PyMethod.java:141)
    at org.python.pycode._pyx58.test$2(sketch_210426a.pyde:6)
    at org.python.pycode._pyx58.call_function(sketch_210426a.pyde)
    at org.python.core.PyTableCode.call(PyTableCode.java:171)
    at org.python.core.PyBaseCode.call(PyBaseCode.java:139)
    at org.python.core.PyFunction.__call__(PyFunction.java:413)
    at org.python.pycode._pyx58.f$0(sketch_210426a.pyde:1)
    at org.python.pycode._pyx58.call_function(sketch_210426a.pyde)
    at org.python.core.PyTableCode.call(PyTableCode.java:171)
    at org.python.core.PyCode.call(PyCode.java:18)
    at org.python.core.Py.runCode(Py.java:1614)
    at org.python.core.Py.exec(Py.java:1658)
    at org.python.pycode._pyx57.f$0(/var/folders/vf/3zy00t252_372n6n1n060tc00000gn/T/sketch_210426a6112183873956099370/sketch_210426a.pyde:96)
    at org.python.pycode._pyx57.call_function(/var/folders/vf/3zy00t252_372n6n1n060tc00000gn/T/sketch_210426a6112183873956099370/sketch_210426a.pyde)
    at org.python.core.PyTableCode.call(PyTableCode.java:171)
    at org.python.core.PyCode.call(PyCode.java:18)
    at org.python.core.Py.runCode(Py.java:1614)
    at org.python.core.Py.exec(Py.java:1658)
    at org.python.util.PythonInterpreter.exec(PythonInterpreter.java:276)
    at jycessing.PAppletJythonDriver.processSketch(Unknown Source)
    at jycessing.PAppletJythonDriver.findSketchMethods(Unknown Source)
    at jycessing.Runner.runSketchBlocking(Unknown Source)
    at jycessing.mode.run.SketchRunner.lambda$startSketch$3(Unknown Source)
    at java.lang.Thread.run(Thread.java:748)

    at jycessing.mode.run.SketchRunner.convertPythonSketchError(Unknown Source)
    at jycessing.mode.run.SketchRunner.lambda$startSketch$3(Unknown Source)
    at java.lang.Thread.run(Thread.java:748)

有趣的是,只有在同时定义了任何一个处理的内置函数(例如setup()draw()mouseClicked)时,我才会返回错误,所以如果我运行:

def why_arent_you_working():
    print("please")
    
def test():
    strokeWeight(5)
    circle(100, 100, 100)
    
test()
why_arent_you_working()

出于某种原因它会起作用。

我已经尝试了 10 个关于 NullPointerException 的不同线程,但我似乎无法找到我做错了什么。正如我在这篇文章的开头,我是一个新手,所以这可能是我的一些愚蠢的疏忽,但如果有人帮助我,那就太好了。

【问题讨论】:

    标签: python nullpointerexception processing


    【解决方案1】:

    这可能是“混合活动模式和静态模式”的结果。活动模式是您使用setup() 和/或draw() 时,而静态模式是您不使用时。基本上,如果您使用setup(),则不能调用缩进(或变量定义)之外的任何函数。在屏幕上画圆的标准方法是这样的:

    def setup():
        size(400,400)
    
    def draw():
        strokeWeight(5)
        circle(100, 100, 100)
    

    draw() 的调用方式与 setup() 类似:它会自动调用,无需您在任何地方显式调用。

    请记住,draw() 是一个循环,因此它将持续运行直到调用 noLoop()

    【讨论】:

      【解决方案2】:

      当您声明一个变量时,您所做的是创建指向该变量的东西。即当我们创建一个变量 x = 5 时。x 只是一个指向数字 5 的引用。

      NullPointerException 在您指向 Null 的东西时出现。我对 strokeWeight 方法不太熟悉,所以我不能准确告诉你,但如果你为我添加更多代码,我可以尝试提供更多帮助。

      在日志文件(您已编码的第二部分)中,您可以单击行号,它会将您带到错误来自方法的哪个部分。

      所以下面它告诉我们 NullPointerException 来自第 14431 行中名为 processing.core.PApplet.strokeWeight 的某个地方。如果您可以单击该数字并将该方法复制到您的原始帖子中,我可以从那里尝试更多帮助。

      processing.app.SketchException: java.lang.NullPointerException at processing.core.PApplet.strokeWeight(PApplet.java:14431)

      【讨论】:

      • 感谢您的回复,但我不太清楚您的意思。我点击了这个号码,但它并没有带我去任何地方。这是截图:ibb.co/F7vbPzh。我也不确定在控制台中的某个地方点击哪里?我正在使用 Python 处理,再次感谢
      • 对不起,我以为你的编辑会支持它,我的错!这段代码的目的是什么你想画一个圆圈?还有你是否导入了处理包?
      • 不,没关系。 circle() 函数是 Processing 中的一个内置函数,它在调用时接受高度、宽度和半径等参数来绘制圆。我没有导入任何我知道的包。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-09
      • 1970-01-01
      • 2012-12-06
      • 2015-11-22
      • 2015-06-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多