java—为什么我要使用高于12.02的javafx版本获取gl\u framebuffer\u incomplete\u附件

dced5bon  于 2021-07-03  发布在  Java
关注(0)|答案(0)|浏览(207)

我已经构建了一个基于linux的ubuntusnap应用程序,使用base20(即ubuntu20.04)作为目标操作系统,它正在发行中。
该应用程序在openjfx11和12上使用openjdk11到15.0.1运行得非常好。但是,如果我使用最新版本的openjfx,每次屏幕更改(舞台上场景的更改)都会出现以下错误-屏幕变为空白,终端上会显示以下错误:

Incomplete attachment. (GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT)(FBO - 820)
Error creating framebuffer object with TexID 1).

如果我强制屏幕重写(例如,切换到终端窗口或其他应用程序,然后返回到我的应用程序),屏幕将显示预期的内容。
这似乎是javafx连续发行版中的一个bug,但是snap中包含的ubuntu20.04库中可能缺少一些东西。我将在snapcraft网站上发布一个类似的帮助请求,但是这里可能有人遇到了类似的问题,可能有一些建议。
我的开发环境是使用gradle和openjdk 15的intellij idea。
提前谢谢
艾伦
edit:我已经设法对自己的代码进行了一些跟踪,并将其导入到java库源代码中。
错误发生在文件scene.java中此方法执行的最后一行之后-一件事-应用程序不会崩溃,它在一个空白的白色屏幕上运行,直到有东西强制刷新屏幕,例如打开另一个全屏应用程序,然后再次关闭它-然后出现所需的场景!
第一行位于scene.java中的第2578行

//== 
@Override
       public void mouseEvent(EventType<MouseEvent> type, double x, double y, double screenX, double screenY,
                              MouseButton button, boolean popupTrigger, boolean synthesized,
                              boolean shiftDown, boolean controlDown, boolean altDown, boolean metaDown,
                              boolean primaryDown, boolean middleDown, boolean secondaryDown,
                              boolean backDown, boolean forwardDown)
       {
           MouseEvent mouseEvent = new MouseEvent(type, x, y, screenX, screenY, button,
                   0, // click count will be adjusted by clickGenerator later anyway
                   shiftDown, controlDown, altDown, metaDown,
                   primaryDown, middleDown, secondaryDown, backDown, forwardDown,
                   synthesized, popupTrigger, false, null);
           processMouseEvent(mouseEvent);
       }

//===========================================================================

出错前堆栈:

//====        
mouseEvent:2591, Scene$ScenePeerListener (javafx.scene)
run:409, GlassViewEventHandler$MouseEventNotification (com.sun.javafx.tk.quantum)
run:299, GlassViewEventHandler$MouseEventNotification (com.sun.javafx.tk.quantum)
doPrivileged:-1, AccessController (java.security)
lambda$handleMouseEvent$2:447, GlassViewEventHandler (com.sun.javafx.tk.quantum)
get:-1, 2067987277 (com.sun.javafx.tk.quantum.GlassViewEventHandler$$Lambda$812)
runWithoutRenderLock:412, QuantumToolkit (com.sun.javafx.tk.quantum)
handleMouseEvent:446, GlassViewEventHandler (com.sun.javafx.tk.quantum)
handleMouseEvent:556, View (com.sun.glass.ui)
notifyMouse:942, View (com.sun.glass.ui)
_runLoop:-1, GtkApplication (com.sun.glass.ui.gtk)
lambda$runLoop$11:277, GtkApplication (com.sun.glass.ui.gtk)
run:-1, 1159114532 (com.sun.glass.ui.gtk.GtkApplication$$Lambda$115)
run:834, Thread (java.lang)

//============================================================================

应用程序代码调用堆栈:

//==
private void setupStage()
    {

        mLastTitle = mPrimaryStage.getTitle();
        mPrimaryStage.setScene(mScene);
        mPrimaryStage.setTitle("PhotoNoteBook" + MyConstants.TMMARK + " Photo Carousel");
        mPrimaryStage.show();
    }

//===

调用上述方法的方法是:

//==
public PhotoCarousel(ImageContainerCallBack imageContainerCallBack, Stage primaryStage, Scene lastScene, UUID photoNotebookUuid, int imageNumber)
    {
        DEBUG = (MyLogger.getTraceLevel() == MyLogger.TRACELEVELDEBUG);
        MyLogger.Logi(this.getClass(), " - Method: PhotoCarousel",
                "Message: Starting constructor ", "");

        mImageContainerCallback = imageContainerCallBack;
        mPrimaryStage = primaryStage;
        mLastScene = lastScene;
        mPhotoNotebookUuid = photoNotebookUuid;
        mImageNumber = imageNumber;
        mPhotoNotebookDataList = PhotoNotebookDataList.get();

        setUpScene();
        setupStage();
    }

//==

注意:上述方法中的setupscene()是一个创建场景的方法,在javafx 11.0.2->11.0.5中运行良好上述方法由以下调用:

//===
   private void openPhotoCarouselButtonClickHandler()
    {
        mOpenPhotoCarouselButton.setStyle("-fx-background-color:MediumSeaGreen");
        if ((mPhotoNotebookUuid != null) && (photosToWorkWith()))
        {

            PhotoCarousel photoCarousel = new PhotoCarousel(this,
                    mPrimaryStage, mScene, mPhotoNotebookUuid, 0);

        }
        resetButtonColours();
    }

//===

下一个代码片段是创建按钮并将其放置在工具栏上的方法的一部分。片段中描述的按钮使用lambda设置button setonaction变量
调用上述方法的方法是:

//===
                    .
                    .
                    .
        mOpenPhotoCarouselButton = new Button();
        mOpenPhotoCarouselButton.setOnAction(e -> openPhotoCarouselButtonClickHandler());
        mOpenPhotoCarouselButton.setPrefWidth(buttonWidth);
        mOpenPhotoCarouselButton.setText("Photos");

                .
                .

//===

我的身材。grad尔

plugins {
    id 'org.openjfx.javafxplugin' version '0.0.9'
}

plugins {
    id 'java'
    id 'application'
    id "org.beryx.jlink" version "2.22.0"
}

repositories {
    mavenCentral()
    jcenter()
    google()
}

jlink {
    options=['--strip-debug', '--compress', '2', '--no-header-files', '--no-man-pages']
    launcher {
        name = 'photonotebook'
    }
}

group 'com.dryjointproductions.photonotebook'
version '1.4.2'

allprojects {
    apply plugin: 'idea'
    idea.module.outputDir file("out/production/classes")
}

allprojects {
    tasks.withType(JavaCompile) {
        options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"
        }
    }

    sourceSets {
        main {
            resources {
                srcDirs += sourceSets.main.java.srcDirs + sourceSets.main.resources.srcDirs + 'resources'
                exclude '**/*.java'
            }
        }
    }

    javafx {
        version = "13.0.2"
        modules = ['javafx.controls', 'javafx.graphics', 'javafx.base','javafx.fxml', 'javafx.swing', 'javafx.web' ]
    }

compileJava  {
            sourceCompatibility = 11
        }

plugins.withType(JavaPlugin).configureEach {
    java {
        modularity.inferModulePath = true
    }
}

application {
    setMainModule ('PhotoNoteBook')
     setMainClassName('com.dryjointproductions.photonotebook.PhotoNoteBook')
}

dependencies {
   // implementation 'com.google.code.gson:gson:2.7'
    implementation 'com.google.code.gson:gson:2.8.5'
    implementation 'org.xerial:sqlite-jdbc:3.28.0'
    implementation group: 'javax.activation', name: 'activation', version: '1.1.1'
    implementation group: 'javax.mail', name: 'mail', version: '1.4.7'
    implementation 'com.drewnoakes:metadata-extractor:2.14.0'
    implementation 'net.coobird:thumbnailator:0.4.12'
}

我会尝试和文件的错误报告,如果我能找到如何!同时,如果有人发现我的java有问题,我将不胜感激!

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题