插入到 sql 的按钮:事件处理程序不在命名空间中或脚本中有错误

Posted

技术标签:

【中文标题】插入到 sql 的按钮:事件处理程序不在命名空间中或脚本中有错误【英文标题】:Button to insert in to sql : event handler is not in the Namespace or there is an error in the script 【发布时间】:2016-12-30 12:22:44 【问题描述】:

我正在使用 javafx 和 sqllite 构建这个程序 我在 fxml 中有带有 fx:id button1 的按钮 和 onAction:WriteToSql

package valgykla;

import java.io.IOException;
import java.net.URL;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.ResourceBundle;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.DatePicker;
import javafx.scene.control.TextField;
import javafx.event.ActionEvent;

/**
 * FXML Controller class
 *
 * @author Lukas
 */
public class MeniuController implements Initializable 
    @FXML
    private Button button1;

    @FXML
  public static void WriteToSql(ActionEvent sql)    
        Connection con = null;
        PreparedStatement prSt = null;
        try 
            Class.forName("org.sqlite.JDBC");
            con = DriverManager.
                getConnection("jdbc:sqlite:database.db");
            String query = "insert into Meniu(name,code) values(?,?)";
            prSt = con.prepareStatement(query);
           prSt.setString(1, "jack");
           prSt.setString(12, "02545");
            int count = prSt.executeUpdate();
         catch (ClassNotFoundException | SQLException e) 
            // TODO Auto-generated catch block

        
        // TODO Auto-generated catch block
         finally
            try
                if(prSt != null) prSt.close();
                if(con != null) con.close();
             catch(Exception ex)


        
  

    public void initialize(URL url, ResourceBundle rb) 
        // TODO
        



很遗憾我得到了错误

Caused by: javafx.fxml.LoadException: Error resolving onAction='#WriteToSql', either the event handler is not in the Namespace or there is an error in the script.
file:/C:/Users/Lukas/Desktop/lukasX/Valgykla/dist/run1382723305/Valgykla.jar!/valgykla/Meniu.fxml:29

【问题讨论】:

【参考方案1】:

WriteToSql 方法是static。 JavaFX 不再考虑事件处理程序的控制器的static 方法...(另请参阅javafx 8 compatibility issues - FXML static fields)

只需删除 static 关键字即可解决问题。此外,由于您使用@FXML 注释了该方法,因此您也可以将其设为private

@FXML
private void WriteToSql(ActionEvent sql)
    ...

【讨论】:

【参考方案2】:

emmmm,当我第一次在 Eclipse 上尝试时,我使用 onAction="#youfactionname",然后导致错误。我检查了所有内容,没有错。然后我删除符号 #,它运行良好。但过了一会儿,当我尝试运行另一个程序时,它会出错,我不知道为什么,我在网上搜索它,看到你在你的 onAction 名称中输入了 #,最后我将 # 放回我的 onAction 名称,奇怪的是它可以工作。 我的ide总是发生这么多奇怪的问题........不仅是食人鱼

【讨论】:

你能稍微清理一下语言和格式吗?目前尚不清楚这是一个有效的答案,还是“我也是”类型的回应。请保持简短、清晰和中肯的回答。

以上是关于插入到 sql 的按钮:事件处理程序不在命名空间中或脚本中有错误的主要内容,如果未能解决你的问题,请参考以下文章

Vanilla JavaScript 中的事件处理程序命名空间

JavaScript 命名空间和 jQuery 事件处理程序

如何命名事件处理程序的名称空间

winform插入sql的事务处理

如何不在生成的命名空间中包含 Visual Studio 项目文件夹名称

如何防止命名空间 HTML 元素的 Vue 错误“未知自定义元素”