Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.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
Javafx 8 我可以用JavaFX8显示图像而不需要OpenGL开销吗?_Javafx 8_Raspberry Pi2 - Fatal编程技术网

Javafx 8 我可以用JavaFX8显示图像而不需要OpenGL开销吗?

Javafx 8 我可以用JavaFX8显示图像而不需要OpenGL开销吗?,javafx-8,raspberry-pi2,Javafx 8,Raspberry Pi2,我正在尝试在Raspberry Pi2上编写一个简单的FX8图像显示程序,它只有64MB的GPU内存。这将导致com.sun.prism.impl.BaseGraphics.drawTexture上出现NullPointer异常,试图渲染ImageView。这是与打包的Oracle JDK8(build 1.8.0-b132)一起提供的 我在Pi stackexchange上被告知128MB是使用OpenGL功能的最小GPU内存,这似乎并不不合理。。。但我不认为我正在做任何花哨到需要OpenGL

我正在尝试在Raspberry Pi2上编写一个简单的FX8图像显示程序,它只有64MB的GPU内存。这将导致com.sun.prism.impl.BaseGraphics.drawTexture上出现NullPointer异常,试图渲染ImageView。这是与打包的Oracle JDK8(build 1.8.0-b132)一起提供的

我在Pi stackexchange上被告知128MB是使用OpenGL功能的最小GPU内存,这似乎并不不合理。。。但我不认为我正在做任何花哨到需要OpenGL的事情

问题: 我是JavaFX和Pi的新手,所以我可能走错了方向。我使用的是Rasbian/X11,但与之无关。JavaFX8是否有一种机制允许我在不使用OpenGL的情况下显示全屏图像

MCVE: 我的最低演示非常简单:一个主播视图持有一个ImageView

堆栈跟踪
是的,你应该能做到。JavaFX可以使用旧的Java2D API进行软件渲染。通常,它应该只在没有可用硬件加速的系统上这样做。如果有,但无法正常工作,则应尝试在启动应用程序时通过添加命令行选项禁用硬件加速:

-朝鲜主义.秩序=j2d


目前,似乎很难找到官方文件,但在其他地方,这是报告的工作

Petr对的回答是“j2d图形管道在JavaFX8中有点不受欢迎,所以最好使用软件管道:
-Dprism.order=sw
”。另外,我认为Java2D可以选择使用硬件加速,所以设置为j2d可能不会完全禁用硬件加速。正如您所注意到的,这些交换机都没有正式的文档记录或支持(但它们无论如何都应该可以工作)。谢谢@jewelsea,这两个都是有效的答案,并且在我的桌面环境中正常工作。然而,这两种方法都不适用于pi。j2d管道抛出一个带有“初始化QuantumRenderer时出错:找不到合适的管道”的RTE。很公平,它已被弃用。但是,软件管道抛出一个SIGSEGV。将等待pi exchange上的评论,然后向Oracle发布错误报告。
package sample;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Stage;

public class Main extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception
    {
        Image image = new Image("/Sponsor.png");
        ImageView imageview = new ImageView(image);
        AnchorPane root = new AnchorPane(imageview);
        Scene scene = new Scene(root, 400, 275);
        primaryStage.setScene(scene);
        imageview.setFitHeight(scene.getHeight());
        imageview.setFitWidth(scene.getWidth());
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}
glGetError 0x505
java.lang.NullPointerException
    at com.sun.prism.impl.BaseGraphics.drawTexture(BaseGraphics.java:389)
    at com.sun.prism.impl.ps.BaseShaderGraphics.drawTexture(BaseShaderGraphics.java:139)
    at com.sun.prism.image.Coords.draw(Coords.java:46)
    at com.sun.prism.image.CompoundCoords.draw(CompoundCoords.java:94)
    at com.sun.javafx.sg.prism.NGImageView.renderContent(NGImageView.java:134)
    at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2043)
    at com.sun.javafx.sg.prism.NGImageView.doRender(NGImageView.java:103)
    at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1951)
    at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:225)
    at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:575)
    at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2043)
    at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1951)
    at com.sun.javafx.tk.quantum.ViewPainter.doPaint(ViewPainter.java:469)
    at com.sun.javafx.tk.quantum.ViewPainter.paintImpl(ViewPainter.java:324)
    at com.sun.javafx.tk.quantum.PresentingPainter.run(PresentingPainter.java:89)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
    at com.sun.javafx.tk.RenderJob.run(RenderJob.java:58)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:129)
    at java.lang.Thread.run(Thread.java:744)