简单的消息框作业给了我色轮

时间:2014-09-23 13:22:04

标签: java javafx joptionpane

我们在课堂上练习了这个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");
}

}

1 个答案:

答案 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表达式。)