From: Frode R. <fro...@er...> - 2001-05-21 21:37:29
|
Hi again, I try with a new example and below you can see the log. I am using Jython2.1a1. If I remove the from ... Import then I get a "AtributeError java package 'datarep.common' has no attribute 'Spacer'". If someone want to try with the datarep_common.jar you can either download Simplicity or send me a mail so I can send it off list. ============ Log start ============ c:\Document\PaaceTest>type test.py type test.py import java,javax,datarep.common from datarep.common import Spacer class testClass: def __init__(self): self.Spacer = datarep.common.Spacer(5,5) t=testClass() print t.Spacer c:\Document\PaaceTest>jython test.py jython test.py datarep.common.Spacer[,0,0,5x5,invalid] c:\Document\PaaceTest>java -jar test.jar -c test.py java -jar test.jar -c test.py Java Traceback: at org.python.core.Py.ImportError(Py.java:180) at org.python.core.imp.importFromAs(imp.java:593) at test$_PyInner.main$3(test.java:61) at test$_PyInner.call_function(test.java:38) at org.python.core.PyTableCode.call(PyTableCode.java:198) at org.python.core.PyCode.call(PyCode.java:13) at org.python.core.imp.createFromCode(imp.java:165) at org.python.core.Py.runMain(Py.java:818) at test.main(test.java:80) Traceback (innermost last): File "C:\Document\PaaceTest\test.py", line 0, in main ImportError: cannot import name Spacer c:\Document\PaaceTest>jythonc -jar test.jar -c test.py jythonc -jar test.jar -c test.py Warning: -jar is deprecated, use --jar processing test Required packages: javax java datarep.common Creating adapters: Creating .java files: test module Compiling .java to .class... Compiling with args: ['c:\\tools\\jdk130\\bin\\javac', '-classpath', '"C:\\tools\\Jython\\Jython21a1\\jython.jar;.;C:\\tools\\SimplicityProfessio nal\\pbclient31RE.jar;C:\\tools\\SimplicityProfessional\\pbnetwork31RE.jar;C :\\tools\\SimplicityProfessional\\datarep_common.jar;.\\jpywork;;C:\\tools\\ Jython\\Jython21a1\\Tools\\jythonc;c:\\Document\\PaaceTest\\.;C:\\tools\\Jyt hon\\Jython21a1\\Lib;C:\\tools\\Jython\\Jython21a1"', '.\\jpywork\\test.java'] 0 Note: Some input files use or override a deprecated API. Note: Recompile with -deprecation for details. Building archive: test.jar Tracking java dependencies: c:\Document\PaaceTest>java -jar test.jar test java -jar test.jar test Java Traceback: at org.python.core.Py.ImportError(Py.java:180) at org.python.core.imp.importFromAs(imp.java:593) at test$_PyInner.main$3(test.java:57) at test$_PyInner.call_function(test.java:36) at org.python.core.PyTableCode.call(PyTableCode.java:198) at org.python.core.PyCode.call(PyCode.java:13) at org.python.core.imp.createFromCode(imp.java:165) at org.python.core.Py.runMain(Py.java:818) at test.main(test.java:74) Traceback (innermost last): File "C:\Document\PaaceTest\test.py", line 0, in main ImportError: cannot import name Spacer c:\Document\PaaceTest>jar -tf c:\tools\SimplicityProfessional\datarep_common.jar jar -tf c:\tools\SimplicityProfessional\datarep_common.jar META-INF/MANIFEST.MF datarep/ datarep/common/ datarep/common/AbsoluteLayout.class datarep/common/ApplicationAudioClip.class datarep/common/BottomLayout.class datarep/common/Calculator.class datarep/common/Calculator$Lexer.class datarep/common/Calculator$Cpu.class datarep/common/CalculatorTest.class datarep/common/CloseListener.class datarep/common/Email.class datarep/common/Flyer.class datarep/common/FlyoutHelpManager.class datarep/common/FrameAnimator.class datarep/common/GBConstraints.class datarep/common/GroupBoxPanel.class datarep/common/HeavyGroupBoxPanel.class datarep/common/Helpable.class datarep/common/HelpTest.class datarep/common/ImageButton.class datarep/common/ImageCanvas.class datarep/common/ImageHandler.class datarep/common/JarUtil.class datarep/common/LeftSideLayout.class datarep/common/MessageBox.class datarep/common/ProgressBar.class datarep/common/Sizer.class datarep/common/Spacer.class datarep/common/TabbedCardPanel.class datarep/common/TemplateProcessor.class datarep/common/TemplateProcessor$Node.class datarep/common/TextPrinter.class datarep/common/Util.class datarep/common/ValidatedTextField.class datarep/common/WrapLabel.class datarep/common/database/ datarep/common/database/QueryTableModel.class datarep/common/database/QueryListModel.class datarep/common/database/QueryComboBoxModel.class datarep/common/database/ColumnMapping.class datarep/common/database/InputMapping.class datarep/common/database/ActionMapping.class datarep/common/database/SelectionMapping.class datarep/common/database/Mapping.class datarep/common/database/Query.class datarep/common/database/QueryList.class datarep/common/database/Command.class datarep/common/database/DatabaseManager.class datarep/common/database/DatabaseManager$SelectionCommandListener.class datarep/common/database/DatabaseManager$ActionCommandListener.class c:\Document\PaaceTest>echo %classpath% echo %classpath% .;C:\tools\SimplicityProfessional\pbclient31RE.jar;C:\tools\SimplicityProfes sional\pbnetwork31RE.jar;C:\tools\SimplicityProfessional\datarep_common.jar c:\Document\PaaceTest> ============ Log end ============ > Hi. > > [Frode Reinsnes] >> I have used Jython for a while, but I haven't use Jythonc before. So I think >> I have miss something, but are not able to se what. : : First example removed because Samuele Pedroni explain it. : >> I am running on Windows 2000 with Sun's JDK 1.3.0. Have I miss some thing? >> >> I wrote this test file because I have develop a application and used the >> interpreter in the debugging phase. Then I want to compile it before I send >> it to external test. But when I compile it with Jythonc and try to run it >> complain about a class in a java library don't exist. > > The std jython interpreter at initialitation time (for jars and dirs) > and at runtime (for dirs) gathers info about java packages and the their > classes (the info about jars is also cached), so a 'dir' correctly reports > all classes in a package. > > The runtime when running jythonc compiled code does not gather such info > (so to be on the safe side for the applet case), on the other hand > the runtime needs to know java packages names to deals with imports properly: > jythonc tries to gather the names of used packages when compiling the program > (through a minimal form of partial evaluation) and store them in the produced > classes but without the complete list of the classes in a package (this is not > really needed and could be slightly different at execution time), so the > empty 'dir' results (only actually imported classes will appear there). > > About the class not found problem: > - a missing 'import' hint > - the program was compiled under a classpath that does not contain > all the classes needed at runtime, so jythonc fails to guess that something > is actually a java package > (yes, roughly jythonc should be executed with a classpath that offers all the > classes that the program will need at runtime) > - a problem with classloaders (these are hard to debug and one > should knows what comes from where) > ... and other possibilities that I don't remember . > > regards, Samuele Pedroni. > |