Javafx .exe 在调用 javafx.scene.effect.DropShadow 时崩溃

问题描述

我的原生 javafx 应用程序在调用 javafx.scene.effect.DropShadow 时在运行时崩溃。 该应用程序仅在我注释掉相关代码时才有效。如何使用 DropShadow 效果来实现?

错误日志:

[Di. Feb. 02 18:58:50 MEZ 2021][INFO] ==================== RUN TASK ====================
[Di. Feb. 02 18:58:50 MEZ 2021][FINE] PB Command for run until end: c:\Users\...\target\client\x86_64-windows\Cleptomania.exe
[Di. Feb. 02 18:58:50 MEZ 2021][FINE] Start process run until end...
[Di. Feb. 02 18:58:59 MEZ 2021][INFO] [SUB] java.lang.RuntimeException: Could not create peer  Merge for renderer com.sun.scenario.effect.impl.prism.ps.PPSRenderer@7464688f
[Di. Feb. 02 18:58:59 MEZ 2021][INFO] [SUB]     at com.sun.scenario.effect.impl.Renderer.getPeerInstance(Renderer.java:254)
[Di. Feb. 02 18:58:59 MEZ 2021][INFO] [SUB]     at com.sun.scenario.effect.CoreEffect.getPeer(CoreEffect.java:66)
[Di. Feb. 02 18:58:59 MEZ 2021][INFO] [SUB]     at com.sun.scenario.effect.CoreEffect.getPeer(CoreEffect.java:92)
[Di. Feb. 02 18:58:59 MEZ 2021][INFO] [SUB]     at com.sun.scenario.effect.CoreEffect.filterImageDatas(CoreEffect.java:106)
[Di. Feb. 02 18:58:59 MEZ 2021][INFO] [SUB]     at com.sun.scenario.effect.Merge.filterImageDatas(Merge.java:39)
[Di. Feb. 02 18:58:59 MEZ 2021][INFO] [SUB]     at com.sun.scenario.effect.Merge.filter(Merge.java:172)
[Di. Feb. 02 18:58:59 MEZ 2021][INFO] [SUB]     at com.sun.scenario.effect.DelegateEffect.filter(DelegateEffect.java:70)
[Di. Feb. 02 18:58:59 MEZ 2021][INFO] [SUB]     at com.sun.scenario.effect.impl.prism.PrEffectHelper.render(PrEffectHelper.java:166)
[Di. Feb. 02 18:58:59 MEZ 2021][INFO] [SUB]     at com.sun.javafx.sg.prism.EffectFilter.render(EffectFilter.java:61)
[Di. Feb. 02 18:58:59 MEZ 2021][INFO] [SUB]     at com.sun.javafx.sg.prism.NGNode.renderEffect(NGNode.java:2384)
[Di. Feb. 02 18:58:59 MEZ 2021][INFO] [SUB]     at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2069)
[Di. Feb. 02 18:58:59 MEZ 2021][INFO] [SUB]     at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1964)
[Di. Feb. 02 18:58:59 MEZ 2021][INFO] [SUB]     at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:270)
[Di. Feb. 02 18:58:59 MEZ 2021][INFO] [SUB]     at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:579)
[Di. Feb. 02 18:58:59 MEZ 2021][INFO] [SUB]     at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2072)
[Di. Feb. 02 18:58:59 MEZ 2021][INFO] [SUB]     at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1964)
[Di. Feb. 02 18:58:59 MEZ 2021][INFO] [SUB]     at com.sun.javafx.tk.quantum.ViewPainter.doPaint(ViewPainter.java:479)
[Di. Feb. 02 18:58:59 MEZ 2021][INFO] [SUB]     at com.sun.javafx.tk.quantum.ViewPainter.paintImpl(ViewPainter.java:328)
[Di. Feb. 02 18:58:59 MEZ 2021][INFO] [SUB]     at com.sun.javafx.tk.quantum.PresentingPainter.run(PresentingPainter.java:91)
[Di. Feb. 02 18:58:59 MEZ 2021][INFO] [SUB]     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
[Di. Feb. 02 18:58:59 MEZ 2021][INFO] [SUB]     at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305)
[Di. Feb. 02 18:58:59 MEZ 2021][INFO] [SUB]     at com.sun.javafx.tk.RenderJob.run(RenderJob.java:58)
[Di. Feb. 02 18:58:59 MEZ 2021][INFO] [SUB]     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
[Di. Feb. 02 18:58:59 MEZ 2021][INFO] [SUB]     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
[Di. Feb. 02 18:58:59 MEZ 2021][INFO] [SUB]     at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:125)
[Di. Feb. 02 18:58:59 MEZ 2021][INFO] [SUB]     at java.lang.Thread.run(Thread.java:834)
[Di. Feb. 02 18:58:59 MEZ 2021][INFO] [SUB]     at com.oracle.svm.core.thread.JavaThreads.threadStartRoutine(JavaThreads.java:519)
[Di. Feb. 02 18:58:59 MEZ 2021][INFO] [SUB]     at com.oracle.svm.core.windows.WindowsJavaThreads.osThreadStartRoutine(WindowsJavaThreads.java:138)
[Di. Feb. 02 18:58:59 MEZ 2021][INFO] [SUB] java.lang.IllegalStateException: Operation requires resource lock
[Di. Feb. 02 18:58:59 MEZ 2021][INFO] [SUB]     at com.sun.prism.impl.ManagedResource.assertLocked(ManagedResource.java:96)
[Di. Feb. 02 18:58:59 MEZ 2021][INFO] [SUB]     at com.sun.prism.impl.BaseTexture.assertLocked(BaseTexture.java:267)
[Di. Feb. 02 18:58:59 MEZ 2021][INFO] [SUB]     at com.sun.prism.impl.ps.BaseShaderContext.setTexture(BaseShaderContext.java:695)
[Di. Feb. 02 18:58:59 MEZ 2021][INFO] [SUB]     at com.sun.prism.impl.ps.BaseShaderContext.validateTextureOp(BaseShaderContext.java:591)
[Di. Feb. 02 18:58:59 MEZ 2021][INFO] [SUB]     at com.sun.prism.impl.ps.BaseShaderContext.validateTextureOp(BaseShaderContext.java:507)
[Di. Feb. 02 18:58:59 MEZ 2021][INFO] [SUB]     at com.sun.prism.impl.BaseGraphics.drawTextureRaw(BaseGraphics.java:727)
[Di. Feb. 02 18:58:59 MEZ 2021][INFO] [SUB]     at com.sun.scenario.effect.impl.prism.ps.PPSOneSamplerPeer.filterImpl(PPSOneSamplerPeer.java:117)
[Di. Feb. 02 18:58:59 MEZ 2021][INFO] [SUB]     at com.sun.scenario.effect.impl.prism.ps.PPSEffectPeer.filter(PPSEffectPeer.java:54)
[Di. Feb. 02 18:58:59 MEZ 2021][INFO] [SUB]     at com.sun.scenario.effect.LinearConvolveCoreEffect.filterImageDatas(LinearConvolveCoreEffect.java:85)
[Di. Feb. 02 18:58:59 MEZ 2021][INFO] [SUB]     at com.sun.scenario.effect.LinearConvolveCoreEffect.filterImageDatas(LinearConvolveCoreEffect.java:41)
[Di. Feb. 02 18:58:59 MEZ 2021][INFO] [SUB]     at com.sun.scenario.effect.FilterEffect.filter(FilterEffect.java:195)
[Di. Feb. 02 18:58:59 MEZ 2021][INFO] [SUB]     at com.sun.scenario.effect.Offset.filter(Offset.java:160)
[Di. Feb. 02 18:58:59 MEZ 2021][INFO] [SUB]     at com.sun.scenario.effect.Merge.filter(Merge.java:148)
[Di. Feb. 02 18:58:59 MEZ 2021][INFO] [SUB]     at com.sun.scenario.effect.DelegateEffect.filter(DelegateEffect.java:70)
[Di. Feb. 02 18:58:59 MEZ 2021][INFO] [SUB]     at com.sun.scenario.effect.impl.prism.PrEffectHelper.render(PrEffectHelper.java:166)
[Di. Feb. 02 18:58:59 MEZ 2021][INFO] [SUB]     at com.sun.javafx.sg.prism.EffectFilter.render(EffectFilter.java:61)
[Di. Feb. 02 18:58:59 MEZ 2021][INFO] [SUB]     at com.sun.javafx.sg.prism.NGNode.renderEffect(NGNode.java:2384)
[Di. Feb. 02 18:58:59 MEZ 2021][INFO] [SUB]     at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2069)
[Di. Feb. 02 18:58:59 MEZ 2021][INFO] [SUB]     at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1964)
[Di. Feb. 02 18:58:59 MEZ 2021][INFO] [SUB]     at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:270)
[Di. Feb. 02 18:58:59 MEZ 2021][INFO] [SUB]     at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:579)
[Di. Feb. 02 18:58:59 MEZ 2021][INFO] [SUB]     at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2072)
[Di. Feb. 02 18:58:59 MEZ 2021][INFO] [SUB]     at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1964)
[Di. Feb. 02 18:58:59 MEZ 2021][INFO] [SUB]     at com.sun.javafx.tk.quantum.ViewPainter.doPaint(ViewPainter.java:479)
[Di. Feb. 02 18:58:59 MEZ 2021][INFO] [SUB]     at com.sun.javafx.tk.quantum.ViewPainter.paintImpl(ViewPainter.java:328)
[Di. Feb. 02 18:58:59 MEZ 2021][INFO] [SUB]     at com.sun.javafx.tk.quantum.PresentingPainter.run(PresentingPainter.java:91)
[Di. Feb. 02 18:58:59 MEZ 2021][INFO] [SUB]     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
[Di. Feb. 02 18:58:59 MEZ 2021][INFO] [SUB]     at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305)
[Di. Feb. 02 18:58:59 MEZ 2021][INFO] [SUB]     at com.sun.javafx.tk.RenderJob.run(RenderJob.java:58)
[Di. Feb. 02 18:58:59 MEZ 2021][INFO] [SUB]     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
[Di. Feb. 02 18:58:59 MEZ 2021][INFO] [SUB]     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
[Di. Feb. 02 18:58:59 MEZ 2021][INFO] [SUB]     at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:125)
[Di. Feb. 02 18:58:59 MEZ 2021][INFO] [SUB]     at java.lang.Thread.run(Thread.java:834)
[Di. Feb. 02 18:58:59 MEZ 2021][INFO] [SUB]     at com.oracle.svm.core.thread.JavaThreads.threadStartRoutine(JavaThreads.java:519)
[Di. Feb. 02 18:58:59 MEZ 2021][INFO] [SUB]     at com.oracle.svm.core.windows.WindowsJavaThreads.osThreadStartRoutine(WindowsJavaThreads.java:138)

更新 - 示例代码

import javafx.application.Application;
import javafx.application.Platform;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.effect.DropShadow;
import javafx.scene.layout.Background;
import javafx.scene.layout.BackgroundFill;
import javafx.scene.layout.CornerRadii;
import javafx.scene.layout.Pane;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
import javafx.stage.Stage;
import javafx.stage.WindowEvent;

public class SampleApp extends Application {

    @Override
    public void start(Stage stage) throws Exception 
    {
        VBox root = new VBox();     
        root.getChildren().add(getButtonBox(root)); 

        Scene scene = new Scene(root,600,600);  
        stage.setScene(scene);
        stage.setOnCloseRequest(new EventHandler<WindowEvent>() 
        {
            @Override
            public void handle(WindowEvent t) 
            {
                Platform.exit();
                System.exit(0);
            }
        });
        stage.show();
    }
    
    private VBox getButtonBox(Pane pane)
    {
        VBox box = new VBox();
        
        Button btn = new Button("No Effect");
        btn.setOnAction(action -> setChild(pane,false));
        
        Button btnEff = new Button("With Effect");
        btnEff.setOnAction(action -> setChild(pane,true));
        
        box.getChildren().addAll(btn,btnEff);
        return box;
    }
    
    private void setChild(Pane pane,boolean withEffect)
    {   
        VBox box = new VBox();
        Text text = new Text("Hello");
        text.setFill(Color.WHITE);
        text.setFont(Font.font("Courier New",FontWeight.BOLD,40));
        box.getChildren().add(text);
        box.setAlignment(Pos.CENTER);
        box.setBackground(new Background(new BackgroundFill(Color.BLUE,new CornerRadii(5,5,false),Insets.EMPTY)));
        box.setTranslateZ(-4);
        if(withEffect)      
        {
            DropShadow dropShadow = new DropShadow();
            dropShadow.setRadius(5.0);
            dropShadow.setSpread(1.0); 
            box.setEffect(dropShadow);
        }
        if(pane.getChildren().size() > 1)   
            pane.getChildren().set(1,box);
        else
            pane.getChildren().add(box);
    }
    
    public static void main(String args[]) 
    {
        launch(args);
    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)