フラクタル画像生成プログラムでは、以下のコードに示すように、javafx.scene.control.ColorPickerを表示して、ユーザーがオンスクリーンイメージの色を編集できるようにします。javaFX ColorPickerを非表示にするとNullPointerExceptionが発生する
トップでは、ユーザーがColorPickerを隠すことを可能にするイベントハンドラと、それをラッピングするGridPaneを設定しました。これは、意図した動作が発生するという意味では機能しますが、同時にJVMはNullPointerExceptionをスローします。スタックトレースは、主にjavafxクラスを参照し、実行クラスにはまったく関連しません。
私はこのコードを使い、stackoverflow以降を検索しましたが、これは私に悩まされています。
誰でも原因を診断してください。 (コードおよびスタックトレースが続く。)
scene.setOnKeyPressed(ev2 -> {
if (ev2.getCode().equals(KeyCode.ENTER)) {
System.out.println("\nEnter pressed, panel should hide...");
huePanel.setVisible(false); // press Enter to kill panel
huePanel.getChildren().clear();
root.getChildren().removeAll(huePanel);
}
});
huePanel = new GridPane();
huePanel.setAlignment(Pos.TOP_CENTER);
root.getChildren().addAll(huePanel);
int cl = colours[colourscheme].length;
Rectangle[] squares = new Rectangle[cl];
ColorPicker[] pickers = new ColorPicker[cl];
for (int i = 0; i < cl; i++) {
int squareSize = width/20;
squares[i] = new Rectangle(squareSize, squareSize, colours[colourscheme][i]);
squares[i].setStroke(BLACK);
squares[i].setStrokeWidth(2.0);
GridPane.setRowIndex(squares[i], (i/8) * 2);
GridPane.setColumnIndex(squares[i], i % 8);
pickers[i] = new ColorPicker(colours[colourscheme][i]);
GridPane.setRowIndex(pickers[i], (i/8) * 2 + 1);
GridPane.setColumnIndex(pickers[i], i % 8);
huePanel.getChildren().addAll(squares[i], pickers[i]);
}
for (int j = 0; j < cl; j++) {
indexOfColourToModify = j;
pickers[j].setOnAction(ev1 -> {
ColorPicker cp = (ColorPicker)(ev1.getSource());
int k = huePanel.getChildren().indexOf(cp)/2; // really (idx-1)/2, as idx is odd
// due to squares[]
Color c = cp.getValue();
colours[colourscheme][k] = c;
huePanel.requestLayout();
System.out.println("\ncolours[" + colourscheme + "][" + k + "] set to " + c);
paintImage(screenImage[screenImageIndex], realMinIts, realMaxIts);
}
);
}
=================================== ====================
Enter pressed, panel should hide...
Exception in thread "JavaFX Application Thread" java.lang.NullPointerException
at com.sun.javafx.scene.control.skin.ComboBoxPopupControl.positionAndShowPopup(ComboBoxPopupControl.java:197)
at com.sun.javafx.scene.control.skin.ComboBoxPopupControl.show(ComboBoxPopupControl.java:170)
at com.sun.javafx.scene.control.skin.ColorPickerSkin.show(ColorPickerSkin.java:464)
at com.sun.javafx.scene.control.skin.ComboBoxBaseSkin.handleControlPropertyChanged(ComboBoxBaseSkin.java:127)
at com.sun.javafx.scene.control.skin.ColorPickerSkin.handleControlPropertyChanged(ColorPickerSkin.java:470)
at com.sun.javafx.scene.control.skin.BehaviorSkinBase.lambda$registerChangeListener$61(BehaviorSkinBase.java:197)
at com.sun.javafx.scene.control.MultiplePropertyChangeListenerHandler$1.changed(MultiplePropertyChangeListenerHandler.java:55)
at javafx.beans.value.WeakChangeListener.changed(WeakChangeListener.java:89)
at com.sun.javafx.binding.ExpressionHelper$SingleChange.fireValueChangedEvent(ExpressionHelper.java:182)
at com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:81)
at javafx.beans.property.ReadOnlyBooleanPropertyBase.fireValueChangedEvent(ReadOnlyBooleanPropertyBase.java:72)
at javafx.beans.property.ReadOnlyBooleanWrapper.fireValueChangedEvent(ReadOnlyBooleanWrapper.java:103)
at javafx.beans.property.BooleanPropertyBase.markInvalid(BooleanPropertyBase.java:110)
at javafx.beans.property.BooleanPropertyBase.set(BooleanPropertyBase.java:144)
at javafx.scene.control.ComboBoxBase.setShowing(ComboBoxBase.java:185)
at javafx.scene.control.ComboBoxBase.show(ComboBoxBase.java:391)
at com.sun.javafx.scene.control.behavior.ComboBoxBaseBehavior.show(ComboBoxBaseBehavior.java:286)
at com.sun.javafx.scene.control.behavior.ColorPickerBehavior.callAction(ColorPickerBehavior.java:82)
at com.sun.javafx.scene.control.behavior.BehaviorBase.callActionForEvent(BehaviorBase.java:218)
at com.sun.javafx.scene.control.behavior.ComboBoxBaseBehavior.callActionForEvent(ComboBoxBaseBehavior.java:136)
at com.sun.javafx.scene.control.behavior.BehaviorBase.lambda$new$74(BehaviorBase.java:135)
at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
at javafx.event.Event.fireEvent(Event.java:198)
at javafx.scene.Scene$KeyHandler.process(Scene.java:3964)
at javafx.scene.Scene$KeyHandler.access$1800(Scene.java:3910)
at javafx.scene.Scene.impl_processKeyEvent(Scene.java:2040)
at javafx.scene.Scene$ScenePeerListener.keyEvent(Scene.java:2501)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$KeyEventNotification.run(GlassViewEventHandler.java:217)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$KeyEventNotification.run(GlassViewEventHandler.java:149)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleKeyEvent$353(GlassViewEventHandler.java:248)
at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleKeyEvent(GlassViewEventHandler.java:247)
at com.sun.glass.ui.View.handleKeyEvent(View.java:546)
at com.sun.glass.ui.View.notifyKey(View.java:966)
at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)
at com.sun.glass.ui.gtk.GtkApplication.lambda$null$49(GtkApplication.java:139)
at java.lang.Thread.run(Thread.java:745)
私は非常に似ていますが、TableCellで 'CheckComboBox'を使用しようとしています。 [詳細はこちら](https://www.reddit.com/r/javahelp/comments/7dj01s/checkcombobox_tablecell/) –