gpt4 book ai didi

java - jbutton 请求并发无响应

转载 作者:行者123 更新时间:2023-12-02 05:16:11 25 4
gpt4 key购买 nike

任何人都可以帮助我为我无响应的 jbutton 实现线程吗?我想使用 pepraredStatement 插入数据库。但是,每当我添加数据库部分(连接和 pepraredStatement )时,“上传”按钮就会无响应。但是当我删除与数据库相关的任何内容时,我的所有按钮都可以工作。您可以在这里找到代码 http://pastebin.com/euKdWhr2 .

我将非常感谢任何帮助或建议。我已经对线程进行了解释,但我仍然无法将其包含到我的代码中。

public void actionPerformed(ActionEvent ev)
{
String file = fileField.getText();
SetGetQuestionFileName pattern = new SetGetQuestionFileName(file);
ConnectToDatabase database = new ConnectToDatabase();
try
{

///////// check whether textfile is empty or not

if( ev.getActionCommand().equals("UPLOAD"))
{
if(fileField.getText().isEmpty())
{
JOptionPane.showMessageDialog(null,"File field can not be empty!!! Please try again.","ALERT", JOptionPane.ERROR_MESSAGE);
}
else
{
File fi = new File(fileField.getText());
//////////////// perform upload

try
{

String sql = "INSERT INTO testsystem.questionnaire (category_questions, questions, correct_answer)" + "VALUES (?, ?, ?)";

PreparedStatement st = null;

Connection dbconnection = database.getConnection();

st = dbconnection.prepareStatement(sql);

if(fi.getAbsoluteFile().exists())
{
List<String> lines = Files.readAllLines(Paths.get(fileField.getText()), Charset.defaultCharset());


for (int i = 0; i < lines.size(); i+=10)
{
String category = lines.get(i);
System.out.println(category);
String question = lines.get(i+1);
System.out.println(question);

String answers =
lines.get(i+2)+System.lineSeparator()
+lines.get(i+3)+System.lineSeparator()
+lines.get(i+4)+System.lineSeparator()
+lines.get(i+5);
System.out.println(answers);

String correct = lines.get(i+7);
System.out.println("correct answer is: "+correct);
System.out.println("----------------");


st.setString(1, category);
st.setString(2, answers);
st.setString(3, correct);
st.executeUpdate();

}

JOptionPane.showMessageDialog(null,"File has been successfully uploaded in the database.","NOTIFCATION",JOptionPane.INFORMATION_MESSAGE);
}
else

JOptionPane.showMessageDialog(null,"File could not be found. Please try again","ALERT",JOptionPane.ERROR_MESSAGE);
}

catch(SQLException ex)
{

}

catch(Exception ex)
{

}

最佳答案

当您有一个操作时,强烈建议您封装实际执行该工作的代码。在您的情况下,它是数据库(称为 DBThread)。为了使按钮不会失去响应,最适合您的方法是将其分为 3 部分(乍一听起来太多,但这是有道理的)。所以你会有

  1. 操作(调用 DBThreadProgress)
  2. DBThreadProgress(这是一个在末尾有一个连接并调用 DBThread 的线程)
  3. DBThread(这就是工作)

所以前面提到的DBThread就是你的业务逻辑。该操作会调用一个进度线程,您可以在面板上放置一个 gif 图像,以向最终用户显示后台正在发生的事情。此 ProgressThread 还允许您等待 DBthread 完成,以便您可以向最终用户告知结果。我通常在开始时将按钮设置为 setEnable(false) ,然后设置为 setEnable(true) ,这样用户就会知道他不能单击两次。

希望这有帮助:-) enter image description here

关于java - jbutton 请求并发无响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26940295/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com