Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.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
'中未定义有效的构造函数;com.sun.javafx.scene.control.skin.ComboBoxBaseSkin';_Java_Css_Javafx_Scenebuilder - Fatal编程技术网

'中未定义有效的构造函数;com.sun.javafx.scene.control.skin.ComboBoxBaseSkin';

'中未定义有效的构造函数;com.sun.javafx.scene.control.skin.ComboBoxBaseSkin';,java,css,javafx,scenebuilder,Java,Css,Javafx,Scenebuilder,我目前正在开发一个库存管理系统。在应用程序上更改场景时,我收到以下错误。仅当该屏幕包含组合框(如下图所示的大多数屏幕)时,才会显示错误 一切运行正常,但我得到下面的错误。我相信这与CSS中的CSS组合框样式有关 与CSS相关的前一个错误的背景:最初,我在查找CSS文件时遇到问题,并得到了错误null/styles.CSS。我通过将以下stylesheets=“@style.css”更改为stylesheets=“/stock/style.css”解决了这个问题。不确定这是否会影响任何东西,我想我

我目前正在开发一个库存管理系统。在应用程序上更改场景时,我收到以下错误。仅当该屏幕包含组合框(如下图所示的大多数屏幕)时,才会显示错误

一切运行正常,但我得到下面的错误。我相信这与CSS中的CSS组合框样式有关

与CSS相关的前一个错误的背景:最初,我在查找CSS文件时遇到问题,并得到了错误null/styles.CSS。我通过将以下
stylesheets=“@style.css”
更改为
stylesheets=“/stock/style.css”
解决了这个问题。不确定这是否会影响任何东西,我想我会提到它,以防它与此有关,即使在更改之前仍然显示错误

May 19, 2020 6:31:50 PM javafx.scene.control.Control loadSkinClass
SEVERE: No valid constructor defined in 'com.sun.javafx.scene.control.skin.ComboBoxBaseSkin' for control ComboBox[id=comboStatus, styleClass=combo-box-base combo-box].
You must provide a constructor that accepts a single Skinnable (e.g. Control or PopupControl) parameter in com.sun.javafx.scene.control.skin.ComboBoxBaseSkin.
CSS如下所示:

.combobox.list单元格{
-外汇背景:#2D75E8;
-背景色:透明;
-fx文本填充:白色;
-外汇储备:3027;
-fx单元大小:1.96667em;
-fx字体大小:粗体;
}
.组合框.列表视图.列表单元格{
-fx文本填充:白色;
-fx字体大小:粗体;
}
.组合框弹出窗口.列表视图{
-fx背景色:#2D75E8,#2D75E8;
-外汇背景插图:0,1;
-特效:dropshadow(三通盒,rgba(0,0,0,0.6),8,0.0,0,0);
-fx字体大小:粗体;
}
.组合框弹出.列表视图.列表单元格{
-外汇储备:40 4 5;
-fx字体大小:粗体;
/*无其他突出显示*/
-fx背景色:#2D75E8;
}
.combo box popup.列表视图.列表单元格:已填充:已选择..combo box popup.列表视图.列表单元格:已填充:已选择:悬停{
-外汇背景:-外汇口音;
-fx背景色:-fx选择栏;
-fx文本填充:白色;
}
.组合框弹出.列表视图.列表单元格:填充:悬停{
-fx背景色:#2D75E8;
-fx文本填充:白色;
-fx字体大小:粗体;
}
.组合框底座{
-fxskin:“com.sun.javafx.scene.control.skin.ComboBoxBaseSkin”;
-fx背景色:#2D75E8、#2D75E8、#2D75E8、#2D75E8;
-外汇背景半径:5,5,4,3;
-外汇背景插图:0-10,0,1,2;
-外汇储备:0;
-fx字体大小:粗体;
}
.组合框底部:悬停{
-外汇颜色:-外汇悬停基地;
}
.组合框底部:显示{
-fx颜色:-fx压制底座;
}
您有:

。组合框底座{
-fxskin:“com.sun.javafx.scene.control.skin.ComboBoxBaseSkin”;
-fx背景色:#2D75E8、#2D75E8、#2D75E8、#2D75E8;
-外汇背景半径:5,5,4,3;
-外汇背景插图:0-10,0,1,2;
-外汇储备:0;
-fx字体大小:粗体;
}
这是你错误的根源。具体而言:

-fx皮肤:“com.sun.javafx.scene.control.skin.ComboBoxBaseSkin”;
这告诉JavaFX使用指定的类作为
Skin
实现,用于所有具有
.combobox base
样式类的控件。此属性的目的是用自定义控件替代
控件。使用自定义皮肤可以改变JavaFX应用程序的外观。但是,您的CSS指定了
ComboBoxBaseSkin
,这至少有三个原因很奇怪:

  • 它是一个抽象类,因此不能直接使用
  • 它是
    ComboBox
    默认皮肤的直接超类:
    ComboBoxPopupControl
  • 它是一个内部类(即私有API)。您不应该直接依赖内部API,因为它可能会在没有通知的情况下更改。举个例子,默认皮肤在JavaFX9中成为公共API,并移动到另一个包中;如果你的应用程序一开始就有效的话,它可能会破坏你的应用程序
  • 最后,错误来自这样一个事实:
    ComboBoxBaseSkin
    有一个构造函数,它带有一个
    ComboBoxBase
    参数,而不是一个
    ComboBox
    参数(CSS似乎在寻找精确的匹配)

    看起来,解决方案是简单地从CSS中删除
    -fx skin
    属性,让
    组合框使用其默认皮肤。或者,如果您实际尝试使用自定义蒙皮,请使用自定义蒙皮类的完全限定名称作为值



    至于您的解析错误,
    -fx font-weight
    希望该值为权重,正如@James_D在问题注释中所指出的那样。如果要更改大小,请使用
    -fx font-size
    。您可以查看以了解有关JavaFX CSS的更多信息。

    错误是
    15px
    不是
    -fx字体重量的有效值:它应该是一个重量(即
    正常的
    粗体的
    粗体的
    ,等等),请参阅。我在你发布的文件中没有看到应受谴责的CSS:这是某个内联CSS吗?“没有有效的构造函数”错误看起来像是版本控制问题?@James\u D谢谢,它在一个FXML中。现在解决了。在哪里可以检查版本控制?取决于IDE,但请检查您正在编译和运行的JDK和JavaFX版本。引用的类(
    com.sun.javafx.control.skin.ComboBoxBaseSkin
    )在版本9中被移动到
    javafx.control.skin.ComboxBaseSkin
    (如果我没记错的话)。这种情况有时会发生,例如,如果使用为JavaFX8编写的第三方库,但运行的是更高版本的JavaFX。@James_D我使用的是IntelliJ IDEA Ultimate最新版本。我使用的是jdk-8u251。