我们在课堂上练习了这个JavaFX练习题,当我点击"点击我时,它一直给我一个色轮。按钮。我查看了代码,甚至让我的教授这样做,我也看不到任何问题。它有可能是Mac的问题吗?我朋友的代码在他的Windows机器上运行得很好。
package csc502_classexample_events_1;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.HBox;
import javafx.stage.Stage;
import javax.swing.JOptionPane;
/**
*
* @author aufty
*/
public class CSC502_ClassExample_Events_1 extends Application
{
@Override
public void start(Stage stage)
{
// Single centered button in HBox
Button button = new Button("Hit me");
button.setOnAction(new ClickHandler());
HBox hBox = new HBox();
hBox.getChildren().add(button);
hBox.setAlignment(Pos.CENTER);
stage.setTitle("My Event Handler Example");
Scene scene = new Scene(hBox, 400, 80);
stage.setScene(scene);
stage.show();
}
public static void main(String [] args)
{
launch(args);
}
}
class ClickHandler implements EventHandler<ActionEvent>
{
@Override
public void handle(ActionEvent event)
{
JOptionPane.showMessageDialog(null, "Ouch");
}
}
答案 0 :(得分:2)
您正尝试从FX应用程序主题中显示JOptionPane。应该在AWT事件处理线程上执行Swing UI操作。在这个例子中,它特别糟糕,因为AWT工具包(可能)甚至没有被初始化。
像
这样的东西class ClickHandler implements EventHandler<ActionEvent> {
@Override
public void handle(ActionEvent event) {
SwingUtilities.invokeLater(() -> JOptionPane.showMessageDialog(null, "Ouch"));
}
}
应该修复它。
(这是Java 8代码,如果您仍在使用旧的Java版本,则可以使用Runnable的匿名内部类而不是lambda表达式。)