【问题标题】:ActionHandler error in FXML JAVAFXFXML JAVAFX 中的 ActionHandler 错误
【发布时间】:2015-06-05 17:48:27
【问题描述】:

我已经使用 javafx 和 scenebuilder 2.0 在 netbeans 中制作了一个基本的登录屏幕!通过复制 youtube 教程。

<Button id="btnLogin" layoutX="146.0" layoutY="243.0" mnemonicParsing="false" onAction="#initialize" prefHeight="59.0" prefWidth="76.0" text="Login" />

如上图,netbeans在“#initialize”下划线,并给出如下错误“Handler method is not access. Make public, or annotate with @FXML”

程序不想启动,甚至不想向我展示我的舞台。

登录控制器:

   @FXML private void initialize (ActionEvent event)
 {
      System.out.println("test");  
 }

如果我只是删除代码“onAction="#initialize",我的程序会运行并显示一个界面,但我的登录按钮不起作用(显然)

附:公开是不行的

任何建议将不胜感激提前感谢

代码:

主要:

public class Login extends Application
{

@Override
public void start(Stage stage) throws Exception 
{
    Parent root = FXMLLoader.load(getClass().getResource("/fxml/Login.fxml"));
    Scene scene = new Scene(root);
    stage.setScene(scene);
    stage.setTitle("Login");
    stage.show();
}

控制器:

public class LoginController implements Initializable {

@FXML
private Label lblmessage;

@FXML
private TextField txtUsername;

@FXML
private Button btnLogin;

@FXML
private PasswordField txtPassword;

   @FXML private void handlebutton()
   {
   System.out.println("test");    
  }

  /**
 * Initializes the controller class.
 * @param url
 * @param rb
 */
@Override
public void initialize(URL url, ResourceBundle rb) {
    // TODO
}



}

【问题讨论】:

  • 你得到了什么运行时异常?
  • Javafx 启动器错误:运行应用程序时出现异常!!!这是没有删除 fxml 的 onnaction 部分!当我删除此部分时,程序会启动,但粗略按钮没有任何功能
  • 请提供异常堆栈跟踪。
  • 使用平台 C:\Program Files\Java\jdk1.7.0_79\jre/bin/ 执行 C:\Users\CasperG\Documents\NetBeansProjects\Login FC\dist\run966869135\Login FC.jar未指定 java 页面语言。 file:/C:/Users/CasperG/Documents/NetBeansProjects/Login%20FC/dist/run966869135/Login%20FC.jar!/fxml/Login.fxml:14 at javafx.fxml.FXMLLoader$Element.processEventHandlerAttributes(FXMLLoader.java :510) 在 javafx.fxml.FXMLLoader.processEndElement(FXMLLoader.java:2472) 在 javafx.fxml.FXMLLoader$ValueElement.processEndElement(FXMLLoader.java:594) 在 fxml.Login.start(Login.java:24) @普斯

标签: java


【解决方案1】:

我猜方法名是问题所在。 @FMXL protected void initialize() 方法可以用作启动时的附加回调。
您可以使用 initialize 方法,例如动态填充您的 UI。

所以:
尝试重命名代码和 fxml 文件中的方法。


如给定here

FXMLLoader 类的一个实例只是简单地寻找 initialize() 控制器上的方法并调用它(如果可用)。请注意,与其他 FXML 回调方法(例如事件处理程序)类似,此方法如果不是公共的,则必须使用 @FXML 注释进行注释。


我刚刚重建了您的代码。我还在登录中添加了这个主要方法:

public static void main(String[] args){
    launch(args);
}

这是 Login.fxml

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>


<VBox maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="LoginController">
  <children>
    <Label fx:id="lblmessage" text="Label" />
    <TextField fx:id="txtUsername" />
    <Button fx:id="btnLogin" mnemonicParsing="false" onAction="#handlebutton" text="Button" />
    <PasswordField fx:id="txtPassword" />
  </children>
</VBox>

通过此设置,一切都按预期工作。
加载舞台,点击按钮时调用handlebutton方法,启动时调用initialize方法。
该错误目前似乎无法重现。

【讨论】:

  • 我已经尝试将方法的名称更改为几个不同的名称!当我删除 # 但程序仍然没有运行时,错误消失了!只有当我删除整个 onaction 部分时它才会运行!最初尝试@FXML private void btnLoginAction ()
  • @CasperGermishuys 我刚刚重新检查过。这正是我在我的应用程序中做的方式,效果很好。也许提供更多代码,StackTrace 可以提供帮助。
【解决方案2】:

谢谢大家!我的问题是在我的 fxml 文件中我命名了我的文本字段/密码字段字段

 <TextField id="txtUsername"....... etc
 <Label id="lblmessage" ...... etc
 <PasswordField id="txtPassword".... etc

因此,每次尝试从控制器/主类访问这些变量时,我都会收到一个空指针,因为我的程序没有收到任何数据,因为我忘记了我的 fX:id,所以上面应该看起来像关注

  <TextField fx:id="txtUsername"....... etc
 <Label fx:id="lblmessage" ...... etc
 <PasswordField fx:id="txtPassword".... etc

然后我的程序完美运行 感谢大家的帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-15
    • 1970-01-01
    • 2012-05-11
    • 1970-01-01
    • 2015-07-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多