2016-12-08 3 views
0

Я пытался запустить несколько эскизов обработки на основе java, используя Jython. Однако в обоих случаях возникают аналогичные ошибки, которые я не могу решить. Вот моя первая часть очень основного кода:Почему у меня возникают подобные ошибки при попытке запустить обработку с помощью Jython в Eclipse?

from processing.core import PApplet 

class HelloProcessing(PApplet): 
def setup(self): 
    global p 
    p = self 
    p.size(350, 350) 

def draw(self): 
    p.fill(p.random(255)) 
    p.rect(150, 150, 50, 50) 

if __name__ == '__main__': 
    import pawt 
    pawt.test(HelloProcessing()) 

я получаю следующие ошибки:

Traceback (most recent call last): 
    File "/home/nimanamjouyan/workspace/LearningPyDev/src/helloProcessing.py", line 15, in <module> 
    pawt.test(HelloProcessing()) 
    File "/home/nimanamjouyan/jython-installer-2.7.0/Lib/pawt/__init__.py", line 9, in test 
    f.add('Center', panel) 
TypeError: add(): 1st arg can't be coerced to String, java.awt.Component 

Другой кусок кода, который я пытаюсь запустить это:

from javax.swing import JFrame 
from processing.core import PApplet 
from random import uniform 

winWidth=600 
winHeight=500 
numBoxes = 1000 
boxes = [] 

class RandBoxes (PApplet): 

    def __init__(self): 
     pass 
    def setup(self): 
     self.size(winWidth, winHeight, self.JAVA2D) 
     while len(boxes)<numBoxes: 
      boxes.append(Box(self,  uniform(0,winWidth),uniform(0,winHeight))) 
     print "number of boxes = %d" % len(boxes) 
    # rqd due to PApplet's using frameRate and frameRate(n) etc. 
    def getField(self, name): 
     #return self.class.superclass.getDeclaredField(name).get(self) 
     return self.PApplet.getDeclaredField(name).get(self) 

    def draw(self): 
     self.background(128) 
     for b in boxes: 
      b.step() 
     if self.frameCount % 10 == 0: 
      print "frameRate=%f frameCount=%i" % (self.getField('frameRate'), self.frameCount) 

class Box(object): 
    def __init__(self, p, x, y): 
     self.p = p 
     self.x = x 
     self.y = y 
     self.c = p.color(255,255,0) 
    def step(self): 
     self.x = max(min(self.x+uniform(-1,1),winWidth),0) 
     self.y = max(min(self.y+uniform(-1,1),winHeight),0) 
     self.paint() 
    def paint(self): 
     self.p.noStroke() 
     self.p.fill(self.c) 
     self.p.rect(self.x-2,self.y-2,5,5) 

if __name__ == '__main__': 
    frame = JFrame(title="Processing",resizable = 0,defaultCloseOperation=JFrame.EXIT_ON_CLOSE) 
    panel = RandBoxes() 
    frame.add(panel) 
    panel.init() 
    while panel.defaultSize and not panel.finished: 
    pass 
    frame.pack() 
    frame.visible = 1 

Ошибка, которую я получаю на этот раз:

Traceback (most recent call last): 
    File "/home/nimanamjouyan/workspace/LearningPyDev/src/RandBoxesTest.py", line 54, in <module> 
    frame.add(panel) 
TypeError: add(): 1st arg can't be coerced to java.awt.PopupMenu, java.awt.Component 

Эти две ошибки кажутся очень похожими. Что я здесь делаю неправильно? java.awt несовместим с классом, с которым я разбираюсь? Как я могу это исправить?

Любая помощь очень ценится.

+1

Привет, Я действительно нашел решение, которое заставляет программу работать, но она не решает проблему. Файл «core.jar», который я использовал, был обработан 3.2.3. Я изменил его с помощью «core.jar» из «Обработка 1.5.1» и «2.2.1», и для них я больше не получил ошибку, и программа работала. –

ответ

0

Я думаю, что это является результатом PApplet больше не продлив Applet и больше не встраивать непосредственно в JFrame в Обработки 3. Для получения дополнительной информации см this page.

Предположительно, библиотека, которую вы используете, основана на PApplet, распространяющемся на Applet, поэтому она не будет работать с обработкой 3. Вот почему ваше решение по возврату к старой версии Обработка работает.

Вам нужно будет проверить документацию вашей библиотеки, чтобы узнать, есть ли способ заставить ее работать с обработкой 3. В противном случае вы застряли с использованием старых версий Обработки на данный момент.