Почему я получаю исключение NullPointerException для strokeWeight() в Processing.py?

#python #nullpointerexception #processing

Вопрос:

Краткое заявление об отказе от ответственности: Я немного новичок, так что эта проблема может быть просто в том, что я не вижу очевидного, но в основном, когда я бегу

 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 , но я просто не могу понять, что я сделал не так. Как я уже писал в начале этого поста, я новичок, так что, вероятно, это какая-то моя глупая оплошность, но было бы здорово, если бы кто-нибудь мне помог.

Ответ №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 . Я не слишком хорошо знаком с методом ударного веса, поэтому не могу сказать вам точно, но я могу попытаться помочь больше, если вы добавите для меня немного больше кода.

В файлах журнала (вторая часть, в которой вы закодировали) вы можете щелкнуть номер строки, и это приведет вас к тому, в какой части метода произошла ошибка.

Итак, ниже это говорит нам о том, что сигнал NullPointerException поступает откуда-то processing.core.PApplet.strokeWeight из строки 14431. Если бы вы могли нажать на номер и скопировать метод в свой исходный пост, я мог бы попробовать помочь немного больше оттуда.

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

Комментарии:

1. Спасибо за ответ, но я не совсем понимаю, что вы имеете в виду. Я нажал на номер, но он меня никуда не ведет. Вот скриншот: ibb.co/F7vbPzh . Я также не уверен, куда нажать, где-нибудь в консоли? Я работаю над обработкой Python и еще раз спасибо

2. Извините, я предполагал, что ваш редактор поддержал бы это, моя вина! Какова цель этого кода, вы пытаетесь нарисовать круг? А также импортировали ли вы пакет обработки?

3. Нет, все в порядке. Функция circle() является встроенной функцией в процессе обработки, и для рисования круга при вызове ей требуются такие параметры, как высота, ширина и радиус. Я не импортировал ни одного пакета, о котором мне известно.