我有一个库的jar文件,其内容是一堆 .class 文件
spl
├── acm
│ ├── graphics
│ │ ├── DrawLineElement.class
│ │ ├── EndRegionElement.class
│ │ ├── FinalPathElement.class
│ │ ├── G3DRect.class
│ │ ├── GArc.class
│ │ ├── GCanvas.class
│ │ ├── GCanvasListener.class
│ │ ├── GCompound.class
│ │ ├── GContainer.class
│ │ ├── GDimension.class
│ │ ├── GFillable.class
│ │ ├── GImage.class
│ │ ├── GIterator.class
│ │ ├── GLabel.class
│ │ ├── GLine.class
│ │ ├── GMath.class
│ │ ├── GMouseEvent.class
│ │ ├── GObject.class
│ │ ├── GObjectList.class
│ │ ├── GOval.class
│ │ ├── GPen.class
│ │ ├── GPoint.class
│ │ ├── GPolygon.class
│ │ ├── GRectangle.class
│ │ ├── GRect.class
│ │ ├── GResizable.class
│ │ ├── GRoundRect.class
│ │ ├── GScalable.class
│ │ ├── GTurtle.class
│ │ ├── PathElement.class
│ │ ├── PathList.class
│ │ ├── PathState.class
│ │ ├── PenImage.class
│ │ ├── SetColorElement.class
│ │ ├── SetLocationElement.class
│ │ ├── StartRegionElement.class
│ │ └── VertexList.class
│ ├── gui
│ │ ├── DoubleField.class
│ │ ├── HPanel.class
│ │ ├── IntField.class
│ │ ├── TableConstraints.class
│ │ ├── TableLayout.class
│ │ ├── TablePanel.class
│ │ └── VPanel.class
│ ├── io
│ │ ├── AWTBooleanInputDialog.class
│ │ ├── AWTDialog.class
│ │ ├── AWTDialogModel.class
│ │ ├── AWTIconCanvas.class
│ │ ├── AWTLineInputDialog.class
│ │ ├── AWTMessageCanvas.class
│ │ ├── AWTMessageDialog.class
│ │ ├── CharacterQueue.class
│ │ ├── ConsoleActionListener.class
│ │ ├── ConsoleInputMonitor.class
│ │ ├── ConsoleModel.class
│ │ ├── ConsoleOutputMonitor.class
│ │ ├── ConsoleReader.class
│ │ ├── ConsoleWriter.class
│ │ ├── DialogModel.class
│ │ ├── IOConsole.class
│ │ ├── IODialog.class
│ │ ├── IOModel.class
│ │ ├── StandardConsoleModel.class
│ │ ├── SwingDialogModel.class
│ │ ├── SystemConsole.class
│ │ └── SystemConsoleModel.class
│ ├── program
│ │ ├── AppletStarter.class
│ │ ├── CommandLineProgram.class
│ │ ├── CommandLineProgramLoader.class
│ │ ├── ConsoleProgram.class
│ │ ├── DefaultActionListener.class
│ │ ├── DialogProgram.class
│ │ ├── GObjectProgram.class
│ │ ├── GProgramListener.class
│ │ ├── GraphicsProgram.class
│ │ ├── OldStyleCheckBoxMenuItem.class
│ │ ├── OldStyleMenuItem.class
│ │ ├── ProgramActionListener.class
│ │ ├── ProgramAppletStub.class
│ │ ├── Program.class
│ │ ├── ProgramContentPaneLayout.class
│ │ ├── ProgramFrame.class
│ │ ├── ProgramMenuBar.class
│ │ ├── ProgramMenuBarListener.class
│ │ ├── ProgramStartupListener.class
│ │ └── ProgramWindowListener.class
│ └── util
│ ├── Animator.class
│ ├── Base64OutputStream.class
│ ├── BMPImageSaver.class
│ ├── CancelledException.class
│ ├── DirectGif89Frame.class
│ ├── DOSCommandLine.class
│ ├── EmptyContainer.class
│ ├── EPSImageSaver.class
│ ├── ErrorException.class
│ ├── ExportAppletDialog.class
│ ├── FileChooserFilter.class
│ ├── Gif89Encoder.class
│ ├── Gif89Frame.class
│ ├── GIF89ImageSaver.class
│ ├── Gif89Put.class
│ ├── GifColorTable.class
│ ├── GIFImageSaver.class
│ ├── GifPixelsEncoder.class
│ ├── HexByteOutputStream.class
│ ├── HexInputStream.class
│ ├── ImageSaver.class
│ ├── IndexGif89Frame.class
│ ├── JPEGImageSaver.class
│ ├── JPGImageSaver.class
│ ├── JTFTools.class
│ ├── MailStream.class
│ ├── MediaTools.class
│ ├── NullAudioClip.class
│ ├── NullOutputStream.class
│ ├── OptionTable.class
│ ├── PICImageSaver.class
│ ├── PICTImageSaver.class
│ ├── Platform.class
│ ├── PNGImageSaver.class
│ ├── ProgressBarDialog.class
│ ├── RandomGenerator.class
│ ├── ReverseColorMap.class
│ ├── ReverseColorMap$ColorRecord.class
│ ├── RTFImageSaver.class
│ ├── SecurityManagerThatFails.class
│ ├── SoundClip.class
│ ├── SoundPlayer.class
│ ├── SpeedBarListener.class
│ ├── SubmitOptions.class
│ ├── SunAudioClip.class
│ ├── SwingTimer.class
│ ├── ThreadedMenuAction.class
│ ├── TIFFImageSaver.class
│ ├── TIFImageSaver.class
│ └── TokenScanner.class
├── META-INF
│ └── MANIFEST.MF
└── stanford
└── spl
├── File_openFileDialog.class
├── G3DRect_create.class
├── G3DRect_setRaised.class
├── GArc_create.class
├── GArc_setFrameRectangle.class
├── GArc_setStartAngle.class
├── GArc_setSweepAngle.class
├── GButton.class
├── GButton_create.class
├── GCheckBox.class
├── GCheckBox_create.class
├── GCheckBox_isSelected.class
├── GCheckBox_setSelected.class
├── GChooser_addItem.class
├── GChooser.class
├── GChooser_create.class
├── GChooser_getSelectedItem.class
├── GChooser_setSelectedItem.class
├── GCompound_add.class
├── GCompound_create.class
├── GEvent_getNextEvent.class
├── GEvent_waitForEvent.class
├── GImage_create.class
├── GInteractor.class
├── GInteractor_getSize.class
├── GInteractor_setActionCommand.class
├── GLabel_create.class
├── GLabel_getFontAscent.class
├── GLabel_getFontDescent.class
├── GLabel_getGLabelSize.class
├── GLabel_setFont.class
├── GLabel_setLabel.class
├── GLine_create.class
├── GLine_setEndPoint.class
├── GLine_setStartPoint.class
├── GObject_contains.class
├── GObject_delete.class
├── GObject_getBounds.class
├── GObject_remove.class
├── GObject_rotate.class
├── GObject_scale.class
├── GObject_sendBackward.class
├── GObject_sendForward.class
├── GObject_sendToBack.class
├── GObject_sendToFront.class
├── GObject_setColor.class
├── GObject_setFillColor.class
├── GObject_setFilled.class
├── GObject_setLineWidth.class
├── GObject_setLocation.class
├── GObject_setSize.class
├── GObject_setVisible.class
├── GOval_create.class
├── GPolygon_addVertex.class
├── GPolygon_create.class
├── GRect_create.class
├── GRoundRect_create.class
├── GSlider.class
├── GSlider_create.class
├── GSlider_getValue.class
├── GSlider_setValue.class
├── GTextField.class
├── GTextField_create.class
├── GTextField_getText.class
├── GTextField_setText.class
├── GTimer.class
├── GTimer_create.class
├── GTimer_deleteTimer.class
├── GTimer_pause.class
├── GTimer_startTimer.class
├── GTimer_stopTimer.class
├── GWindow_addToRegion.class
├── GWindow_clear.class
├── GWindow_close.class
├── GWindow_create.class
├── GWindow_delete.class
├── GWindow_draw.class
├── GWindow_exitGraphics.class
├── GWindow_getScreenHeight.class
├── GWindow_getScreenWidth.class
├── GWindow_repaint.class
├── GWindow_requestFocus.class
├── GWindow_setRegionAlignment.class
├── GWindow_setResizable.class
├── GWindow_setTitle.class
├── GWindow_setVisible.class
├── JavaBackEnd.class
├── JBECanvas.class
├── JBECommand.class
├── JBEConsole.class
├── JBEConsole_clear.class
├── JBEConsole_getLine.class
├── JBEConsole_print.class
├── JBEConsole_println.class
├── JBEConsole_setFont.class
├── JBEConsole_setSize.class
├── JBEFileFilter.class
├── JBELabel.class
├── JBEWindow.class
├── Sound_create.class
├── Sound_delete.class
├── Sound_play.class
├── TopCompound.class
└── TopCompound_create.class
是否可以从该jar文件创建一个C库,以便我可以在我的C应用程序中包含,链接和使用它?如果是,那怎么办?
值得一提的是,根据文档here,我可以访问此库的所有头文件。
提前致谢!
答案 0 :(得分:2)
您正在寻找Java Native Interface(JNI):
您需要将JNI调用包装到您构建的C库接口中。
特别是,看一下允许C程序启动java JVM并执行java函数的调用API:
http://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/invocation.html
答案 1 :(得分:2)