javafx大图像崩溃

2024-04-19

JavaFX 新手

此示例适用于小图像。 但是大图像会使 ImageView 崩溃。

我的示例代码有缺陷吗? JavaFX 中的大图像有问题吗? 还有别的事吗?

我从网上抓了一个例子:

http://www.java2s.com/Code/Java/JavaFX/JavaFXImageZoomExample.htm http://www.java2s.com/Code/Java/JavaFX/JavaFXImageZoomExample.htm

我下载并处理 PDF 文件:

http://optics.byu.edu/BYUOpticsBook_2013.pdf http://optics.byu.edu/BYUOpticsBook_2013.pdf

gs -sDEVICE=png16m -dNOPAUSE -dBATCH -dSAFER \
   -r600 -dFirstPage=1 -dLastPage=1 \
   -sOutputFile=001.png BYUOpticsBook_2013.pdf 

这给了我一个 5100 × 6600 像素的图像。

我尝试查看图像: 几秒钟后出现一个窗口,其中有一个空的 滚动窗格和发送到控制台的堆栈跟踪。

import javafx.application.Application;
import javafx.beans.InvalidationListener;
import javafx.beans.Observable;
import javafx.beans.property.DoubleProperty;
import javafx.beans.property.SimpleDoubleProperty;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.ScrollPane;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.input.ScrollEvent;
import javafx.stage.Stage;

/**
 *
 * @author O.J. Sousa Rodrigues (office at halbgasse.at)
 */
public class ZoomExample extends Application {

  private ImageView imageView = new ImageView();
  private ScrollPane scrollPane = new ScrollPane();
  final DoubleProperty zoomProperty = new SimpleDoubleProperty(200);

  @Override
  public void start(Stage stage) throws Exception {

    zoomProperty.addListener(new InvalidationListener() {
      @Override
      public void invalidated(Observable arg0) {
        imageView.setFitWidth(zoomProperty.get() * 4);
        imageView.setFitHeight(zoomProperty.get() * 3);
      }
    });

    scrollPane.addEventFilter(ScrollEvent.ANY,
        new EventHandler<ScrollEvent>() {

      @Override
      public void handle(ScrollEvent event) {
        if (event.getDeltaY() > 0) {
          zoomProperty.set(zoomProperty.get() * 1.1);
        } else if (event.getDeltaY() < 0) {
          zoomProperty.set(zoomProperty.get() / 1.1);
        }
      }
    });

    imageView.setImage(new Image("file:///home/jeff/001.png"));
    imageView.preserveRatioProperty().set(true);
    scrollPane.setContent(imageView);

    stage.setScene(new Scene(scrollPane, 400, 300));
    stage.show();

  }
  public static void main(String[] args) {
    launch(args);
  }
} 

堆栈跟踪:

java.lang.NullPointerException
at com.sun.prism.sw.SWGraphics.drawTexture(SWGraphics.java:686)
at com.sun.prism.sw.SWGraphics.drawTexture(SWGraphics.java:665)
at com.sun.prism.sw.SWGraphics.drawTexture(SWGraphics.java:648)
at com.sun.javafx.sg.prism.NGImageView.renderContent(NGImageView.java:123)
at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2067)
at com.sun.javafx.sg.prism.NGImageView.doRender(NGImageView.java:103)
at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1959)
at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:235)
at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:576)
at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2067)
at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1959)
at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:235)
at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:576)
at com.sun.javafx.sg.prism.NGNode.renderForClip(NGNode.java:2308)
at com.sun.javafx.sg.prism.NGNode.renderRectClip(NGNode.java:2202)
at com.sun.javafx.sg.prism.NGNode.renderClip(NGNode.java:2228)
at com.sun.javafx.sg.prism.CacheFilter.impl_renderNodeToCache(CacheFilter.java:663)
at com.sun.javafx.sg.prism.CacheFilter.render(CacheFilter.java:567)
at com.sun.javafx.sg.prism.NGNode.renderCached(NGNode.java:2372)
at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2058)
at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1959)
at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:235)
at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:576)
at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2067)
at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1959)
at com.sun.javafx.tk.quantum.ViewPainter.doPaint(ViewPainter.java:474)
at com.sun.javafx.tk.quantum.ViewPainter.paintImpl(ViewPainter.java:327)
at com.sun.javafx.tk.quantum.UploadingPainter.run(UploadingPainter.java:135)
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:125)
at java.lang.Thread.run(Thread.java:745) 

Jira 上报告了几个错误(您需要注册才能阅读它们):

  • RT-21998 https://javafx-jira.kenai.com/browse/RT-21998渲染图像时出现 NullPointerException
  • RT-22669 https://javafx-jira.kenai.com/browse/RT-22669渲染大图像时需要处理纹理加载失败的情况
  • RT-22073 https://javafx-jira.kenai.com/browse/RT-22073如果尺寸大于最大纹理大小,则快照抛出异常 ...

启用此选项 -Dprism.verbose=true 以检查您的设置。

另外,按照这个link https://wiki.openjdk.java.net/pages/viewpage.action?pageId=20415996,有一个设置视频内存的选项。尝试“-Dprism.poolstats=true”来监控纹理池的实际使用情况,以更好地确定上限,并设置“-Dprism.maxvram=XX”为该限制(XX=500m,...)

不过我还没有测试过这个。您可以发布您的图片链接吗?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

javafx大图像崩溃 的相关文章

  • 带预览和进度栏的 Twitter Bootstrap 图像上传

    我如何使用 Twitter Bootstrap 上传带有预览和进度条的单个图像 目前 在保存图像之前 我看不到上传图像的任何预览或进度条 Jasny 的 Bootstrap 分支让您能够接近这一点 看文档 http jasny github
  • 如何从浮点数组创建新的 QImage

    我有一个代表图像的浮点数数组 列在前 我想在 QGraphicsSecene 上将图像显示为 QPixmap 为了做到这一点 我尝试使用 QImage 构造函数 QImage const uchar data int width int h
  • 使用 docx4j 从带有 Base64 图像的 HTML 生成 .docx

    我正在尝试生成一个 docx from a HTML字符串与docx4j in Java 其中包含 Base64 图像 目前 我能够生成 Word 并下载它 在 Vaadin 项目内 但图像无法正确插入 但是 如果我把HTML代码写入一个索
  • 如何使用 IO Codenameone 发布图片/图像

    因为 codenameone 不能使用外部库 HttpConnection 所以我必须使用 Codenameone 提供的内部库 API 只是我已经设法使用 ConnectionRequest 将数据发布到格式化文本 字符串 我想知道是否有
  • Google Apps 脚本:如何水平对齐 inlineImage

    我有以下代码 它是一个更大程序的一部分 我正在尝试将图像从我的 Google 驱动器插入到 Google 文档中 并调整其大小并居中 到目前为止 我能够让程序插入图像并调整其大小 但我不知道如何使 inlineImage 居中 我是使用谷歌
  • 在本地 UIWebView 中使用 Retina 图像

    由于某种原因 我无法让 UIWebView 与我的新 Retina 图像 很好地配合 问题 一步一步 我正在从捆绑包中加载一系列 HTML 帮助文件 如果是 iPhone 4 我的代码会加载不同的 HTML 文件 LWERetinaUtil
  • Tiff 的 getImageWritersByFormatName 中存在问题。获取图像作家

    我正在尝试将 PDF 转换为 tiff 图像 我使用以下代码按格式获取图像编写器 Iterator
  • 如何在滚动框上创建缓慢的滚动效果?

    我喜欢在滚动框中平移图像后创建平滑的减慢滚动效果 就像平移地图一样谷歌地图 http maps google com 我不确定它是什么类型 但行为完全相同 当快速移动地图时 当您释放鼠标时它不会立即停止 而是开始减慢速度 有什么想法 组件
  • HTTP 重定向图像可以吗?

    返回图片资源时返回301 302 303代码可以吗 我过去曾这样做过 而且似乎有效 这是好的做法吗 它与大多数浏览器兼容吗 是的 您可以重定向图像 浏览器将遵循重定向 但出于性能原因 您通常希望将重定向保持在最低限度 因为每个重定向都需要单
  • C# 计算图像差异

    我怎样才能生成一个System Drawing Image包含其他两个图像的像素之间的差异 类似的东西确实如此 但是用 C 编写 The 算法 https github com Phrogz context blender blob mas
  • 动态显示数百张图像

    我必须创建一个能够显示电影院大厅 不知道确切的词 模式的表单 本质上 我必须显示大量 由另一个来源提供 独立的椅子状图像 这些图像可以在单击时改变颜色 状态 我上网寻找解决方案 但我真的不知道如何管理这个问题 有人能帮我吗 如果您需要绘制那
  • .php 随机图像在外部站点上作为 .jpg

    我发布的论坛只允许从外部 URL 加载 jpg png 和 gif 图像 我想解决这个问题 并从服务器上的目录中随机选择一个动态头像 但我无法使其正常工作 可能是由于在外部站点上执行了额外的检查 或者我的代码中存在错误 到目前为止 我已经在
  • 使应用程序背景适合不同设备的最佳方法

    因此 我希望通过一些漂亮的背景图像等来为我的应用程序增添一点趣味 但我很好奇的是如何确保不同的机器人正确渲染 我将在文本后面设置背景 并且我需要确保它们对于每个不同的屏幕尺寸和分辨率具有相同的尺寸和位置 有这方面好的教程吗 Thanks E
  • ABSMIDDLE 在 Firefox 和 Chrome 上的工作方式不同吗?

    我有一个图标图像和文本 如下所示 一切的代码来源是 img src align left My Title Here 问题在于 与 Firefox 相比 Chrome 中的图标没有与标题垂直对齐 我觉得absmiddle根本不起作用 有什么
  • 如何右对齐 Javafx 工具栏中的按钮

    我正在使用 Java FX 场景生成器构建 UI 并且希望工具栏中的按钮浮动到工具栏的右侧 我尝试更改父级 工具栏 和按钮的节点方向 但两者似乎都被忽略 添加一个没有内容的窗格 该窗格始终会增长以适应工具栏中左对齐工具和右对齐工具之间的可用
  • 移动/调整窗口大小时闪烁

    我开发了一个显示 jpeg 图像的应用程序 它可以显示 4 个图像 屏幕的每个象限各一个 为此 它使用了 4 个窗口 窗口没有边框 框架 也没有标题栏 当加载新图像时 窗口大小会根据新图像进行调整 然后显示该图像 尤其是当窗户做得较大时 经
  • 找到图像特征宽度的正确方法和Python包

    输入是一个在黑色背景上带有彩色 抱歉 垂直线的光谱 给定该带的近似 x 坐标 用 X 标记 我想找到该带的宽度 我对图像处理不熟悉 请引导我前往正确的方法图像处理和Python图像处理package也能起到同样的作用 我认为 PIL Ope
  • PHP - 获取base64图像字符串解码并保存为jpg(生成空图像)

    嗨 我实际上是通过 ajax 发送一个 base64 图像字符串到一个 php 脚本 该脚本只是解码字符串并将内容保存为 jpg 文件 但结果是一张空图像 这怎么可能 PHP脚本 uploadedPhotos array photo 1 p
  • Android 相机未保存在特定文件夹 [MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA]

    当我在 Intent 中使用 MediaStore INTENT ACTION STILL IMAGE CAMERA 时遇到问题 相机正常启动 但它不会将文件保存在我的特定文件夹 photo 中 但是当我使用 MediaStore ACTI
  • 使用 CSS 的响应式图像

    我发现调整图像大小以使其具有响应能力很棘手 我正在开发一个 php 应用程序来自动将网站转换为响应式版本 我有点被图像困住了 我已经成功地为网站上的每个图像添加了一个包装类 并且可以很好地调整图像的大小 我的问题在于自然小于窗口的图像 例如

随机推荐

  • 无法在当前状态下启动设备:正在创建

    我在 iOS 8 模拟器的 Xcode 6 中运行应用程序时遇到错误 该错误指出 无法在当前状态下启动设备 正在创建 我尝试重置模拟器的内容 另外 我在安装 Xcode 6 后重新启动了 mac 可能需要修复什么 当我将 Xcode 应用程
  • 没有安排分支的构建

    我刚刚从詹金斯开始 我正在尝试在分支 主控上运行构建 我得到的只是没有安排分支的构建 master 这是日志 Started by timer Sun Mar 05 18 23 43 NPT 2017 Starting branch ind
  • Python Reportlab 中的动态帧大小

    我尝试生成一个发货清单报告实验室 questions tagged reportlab在Python中 我试图使用 Platypus 将所有部分 如发件人地址 收件人地址 表格 放在适当的位置Frames 第一个问题我遇到的问题是我需要很多
  • UICollectionView:不同大小的项目不会在重复使用的项目上计算

    我有一个包含不同项目大小的集合视图 我在其中声明 CGSize collectionView UICollectionView collectionView layout UICollectionViewLayout collectionV
  • 在 Perl 中使用引用指向滑动窗口数组

    这是我的问题 我有 2 个数组 一种是字符数组 代表滑动窗口 角色从开头移动并推到结尾 我想使用第二个数组来存储对数组切片的引用 这些数组切片 跟随 字符移动 例子 my char array h e l l o w o r l d my
  • 表达式树不能包含赋值运算符?

    如何增加 linq 语句中的索引值 int headIndex 1 int itemIndex 1 lst from xx in db vwCustomizationHeaders where xx ProductID pID select
  • Amazon CloudFront 与 S3 --> 按域限制访问?

    在 Amazon S3 上 您可以按域限制对存储桶的访问 但据我从一位有用的 StackOverflow 用户那里了解到 您无法在 CloudFront 上执行此操作 但为什么 如果我是正确的 CloudFront 只允许基于时间的限制或
  • 使用d3.js实现元素的过渡效果

    我正在将一个元素从一个点移动到另一个点 但具体来说我想实现这个动画 http carto net svg samples path animation svg http carto net svg samples path animatio
  • Android WorkManager Worker 无法使用 Dagger Hilt `@WorkerInject` 注入

    我正在尝试遵循以下指南https developer android com training dependency injection hilt jetpack workmanager https developer android co
  • 在 Sybase ASE 中更新插入(更新或插入)?

    我正在编写一个应用程序 将数据从 Oracle 移动到 Sybase 并且需要执行更新 插入操作 在 Oracle 中 我会使用 MERGE INTO 但它似乎在 Sybase 中不可用 无论如何 在 ASE 中也不可用 我知道这可以通过多
  • 为什么 ASP.NET Dynamic 控件即使添加到 Page_Load 中也能保留 ViewState?

    我做了一些与动态控件和 ViewState 相关的研究 我读到 为了保留动态控件的 ViewState 您必须将其添加到 Page Init 事件中 这是有道理的 因为 PageLifeCycle 是 初始化 加载视图状态 加载回发数据 L
  • dynamoDB 如何存储数据?

    由于Dynamodb以键值对的形式存储数据 其中键是主键的类型 值是与其关联的数据 我想知道dynamo db是否真正理解值 json 我所说的值是指json与键关联的对象 RDBMS 中的一行 dynamo db 是否理解有一些属性以及它
  • 如何在现有高流量网站上进行facebook审核流程?

    I have 已经实现 Facebook 登录 注册在网站上 使用 Javascript 和 PHP SDK 的组合 我记得审核过程大约花了一两天的时间 那是一个全新的网站 现在 我需要将相同的功能添加到另一个现有的且目前每天有数百名访问者
  • 如何使用 devtoolset-8-gcc 安装 gcc8

    我使用的是 CentOS Linux 版本 7 3 1611 其中安装了 gcc 4 8 5 20150623 我正在寻找一种安装较新版本的 gcc 的方法 特别是 8 1 我找到了以下关于如何安装 gcc v7 的网站link 1 htt
  • 结合使用 `mutate_at` 和 `na_if` 仅将某些列的零替换为 NA

    我的数据采用以下格式 library tidyverse df lt mtcars df lt df gt mutate vs doubled vs 2 gt select mpg cyl vs am vs doubled head df
  • Socket ReceiveAsync 合并数据包

    我打算通过套接字接收数据包 但由于它们是从发送方以高频率发送的 因此其中许多数据包被打包成一个byte array SocketAsyncEventArgs Buffer然后保存多个数据包 即使它们是单独发送的 使用验证wireshark
  • TypeScript + React:强制该组件返回另一种类型的组件

    假设您有一个名为的通用组件
  • 将参数传递给注册策略

    我正在注册策略的帮助下使用社交身份提供商创建 B2C 用户 但我们需要向这个新用户添加一些用户属性 扩展属性 例如为用户设置 AccountId 如果我添加 AccountId 作为注册属性并输入一些值 它工作正常 当我通过图形 API 检
  • 如何增加R中ggplot2的geom_smooth中的评估点数

    我正在创建一个绘图并为其添加基本的黄土平滑线 qplot Age GTS2004 X d18O data deepsea geom c point geom smooth method loess se T span 0 01 alpha
  • javafx大图像崩溃

    JavaFX 新手 此示例适用于小图像 但是大图像会使 ImageView 崩溃 我的示例代码有缺陷吗 JavaFX 中的大图像有问题吗 还有别的事吗 我从网上抓了一个例子 http www java2s com Code Java Jav