Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么要使用JNI在AWT';什么是帆布?_Java_Java Native Interface_Java Canvas - Fatal编程技术网

Java 为什么要使用JNI在AWT';什么是帆布?

Java 为什么要使用JNI在AWT';什么是帆布?,java,java-native-interface,java-canvas,Java,Java Native Interface,Java Canvas,我是JNI的新手,我在研究JNI时偶然发现了这一点: 本机代码不仅可以与Java接口,还可以在Java画布上绘制,这在Java AWT本机接口中是可能的 是否有特定原因使此功能变得特定/可用?它是否提高了Windows系统上的处理时间?请详细说明为什么以及何时在Java中使用此功能本机性能呈现。。。游戏将是第一个出现在脑海中的东西,但真正绘制任何需要计算密集型或需要高帧速率的图形都将受益 : 从本机代码库直接绘制到Java画布的能力对于计划将遗留软件系统迁移到Java的开发人员非常有用,特别是对

我是JNI的新手,我在研究JNI时偶然发现了这一点:

本机代码不仅可以与Java接口,还可以在Java画布上绘制,这在Java AWT本机接口中是可能的


是否有特定原因使此功能变得特定/可用?它是否提高了Windows系统上的处理时间?请详细说明为什么以及何时在Java中使用此功能

本机性能呈现。。。游戏将是第一个出现在脑海中的东西,但真正绘制任何需要计算密集型或需要高帧速率的图形都将受益

:

从本机代码库直接绘制到Java画布的能力对于计划将遗留软件系统迁移到Java的开发人员非常有用,特别是对于包含高性能渲染引擎的开发人员。它使分阶段迁移变得更加容易,只保留对性能敏感的渲染代码,而将代码中其他不太敏感的部分转换为Java。其结果可以是一个现代的以Java为中心的应用程序,提供可移植性和开发效率的好处,但不会牺牲对本机代码关键部分性能的投资


AWT的JNI绘图最常见的用途是使用OpenGL或DirectX D3D进行3D绘图。一些Java3DAPI,如Java3D和JOGL的初始版本,使用Canvas.java作为绘图表面。它也可以用于2D本机渲染,但Java绘图功能仅足以完成此任务

Java3D 1.7.0将提供其他选项,其Canvas3D直接扩展java.awt.Canvas。JOGL在引擎盖下使用JAWT,除了NEWT,只有其重量级AWT GLCanvas仍然扩展java.AWT.Canvas。Java AWT本机接口用于在本机代码中提供与AWT的良好互操作性,但只有Java绑定(如JOGL)应直接使用它,在scenegraph API中使用它是一个坏主意,JOGL中已经完成了艰苦的工作,当API过于依赖AWT时,使用无AWT的JRE是很困难的。我不相信官方的解释。我认为java.awt.Canvas与awt的线程在渲染和事件处理方面过于妥协。这就是为什么JNI绘图需要锁定/解锁。将JAVA3D与自己独有的画布结合起来听起来不错。缺点是,除非使用屏幕外渲染器,否则无法将其包含在传统的2D GUI中。实际上,通过使用NewtCanvasAWT,可以与AWT交互并同时使用NEWT,在不使用屏幕外渲染的情况下,您可以充分利用这两个世界:)