- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我创建了一个 Swing GUI,它是从其他 Java 类文件调用的。
GUI 的构造函数:
public AdviceGUI(AdviceModel model) throws InvocationTargetException, InterruptedException {
System.out.println("I am called");
//AdviceGUI.model= model;
initComponents();
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager
.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(AdviceGUI.class.getName()).log(
java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(AdviceGUI.class.getName()).log(
java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(AdviceGUI.class.getName()).log(
java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(AdviceGUI.class.getName()).log(
java.util.logging.Level.SEVERE, null, ex);
}
//check
java.awt.EventQueue.invokeAndWait(new Runnable() {
public void run() {
try {
new AdviceGUI(model).setVisible(true);
} catch (InvocationTargetException | InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
}
在主 Java 类中调用 GUI 的构造函数:
public Map<String,ArrayList<String>> queryExpertGUI(AdviceModel model) throws InvocationTargetException, InterruptedException {
for(String str : model.orderedQueries) {
Utils.println("Clause:" + str);
}
//Modes file
//String mode_dir = cmdArgs.getTrainDirVal()
System.out.println("sssssssssss"+" "+model.convertModelForBK());
model.setUserClauses(model.convertModelForBK());
System.out.println("ssss"+" "+model.userClauses);
AdviceGUI a = new AdviceGUI(model);
用例是每次调用 GUI 构造函数的函数时都在 for 循环中调用 GUI,并在单击 GUI 中的按钮后等待 GUI(Jframe) 关闭。为了实现这一点,我在构造函数中使用了 invokeAndWait()。但我收到以下错误:
Caused by: java.lang.Error: Cannot call invokeAndWait from the event dispatcher thread
at java.awt.EventQueue.invokeAndWait(EventQueue.java:1303)
at java.awt.EventQueue.invokeAndWait(EventQueue.java:1296)
at edu.wisc.cs.will.Boosting.UI.AdviceGUI.<init>(AdviceGUI.java:87)
at edu.wisc.cs.will.Boosting.UI.AdviceGUI$1.run(AdviceGUI.java:90)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:301)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
刚接触 Java,任何建议都会有帮助。
最佳答案
看起来您在这里发生了无意的递归:
public AdviceGUI(AdviceModel model) throws InvocationTargetException, InterruptedException {
// java.awt.EventQueue.invokeAndWait(new Runnable() { public void run() { try {
new AdviceGUI(model).setVisible(true);
// } catch (InvocationTargetException | InterruptedException e) { } } } });
}
AdviceGUI
构造函数将尝试构造另一个 AdviceGUI
实例,这将创建另一个实例,这将创建另一个......
您应该重新审视谁在创建第一个 AdviceGUI
实例,并且此时,使用 SwingUtilities.invokeLater( new Runnable() { ... } )
来构造并显示 UI,并从 AdviceGUI
构造函数中删除 invokeLater
。
关于java - 在 Java Swing 中使用 invokeAndWait 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44637618/
发生在后台的进程会触发回调以询问各种问题。 在这种情况下,问题是“可以迁移您的数据吗?”,所以我必须询问用户。由于我们必须在 EDT 上完成所有 Swing 工作,因此最终看起来像这样(我只删除了注释
这个问题在这里已经有了答案: invokeAndWait method in SwingUtilities (2 个答案) 关闭 9 年前。 谁能告诉我这两个代码之间的实际区别是什么,因为它们都产生
我的问题与this有关问题,已经有了答案: yes, there is a happens-before relationship imposed between actionsof the thre
以下代码运行良好 abstract class FunctionRunnable implements Runnable { protected abstract V calculate();
我正在尝试保存 JFrame 的 .PNG 图像。在 JFrame 中,我有两个 Plot3DPanel 对象。很可能是因为同步错误,在保存 .PNG 时左侧尺寸的框架是不可见的。 因此,我使用以下代
run() 方法中的代码未被执行。谁能告诉我为什么? startButton.addActionListener(new ActionListener() { public v
我的 previous problem 有问题.我在代码库的其他地方也有代码 SwingUtillities.invokeAndWait,但是当我删除它时,gui 不会刷新。如果我不删除它,我得到的错
我在某处读到,对于任何影响 gui 视觉效果的线程,它都应该使用 SwingUtilities.invokeAndWait/invokeLater 在 EDT 中运行 对于基本的 gui,是否有必要使
SwingUtilities.invokeAndWait() 抛出一个 InterruptedException 和一个 InvocationTargetException 我应该如何处理这些? p
当 Runnable 与 SwingUtilities.invokeAndWait() 一起使用时是否创建了一个新线程? 最佳答案 不,当 Runnable 与 SwingUtilities.invo
请解释 SwingUtilities 中的 invokeAndWait() 方法。我无法理解这一点。解释的很清楚。 如果你用一个例子来尝试会很有帮助。 编辑添加@noob的问题扩展: this 有什么
我在this post中提到的问题实际上是由于跨线程 GUI 问题而发生的(我希望如此)。 您能帮我处理 Java 版本的操作委托(delegate)吗? 在 C# 中,它是这样内联完成的:
我有一个在多个线程上运行的 Swing 应用程序,我在 EDT 上创建了 Swing 组件。 Executor 会在某个时刻启动将文本插入到 JTextArea 的线程。但是,与 InvokeAndW
很确定是这样 - 但我想确定 -是在 invokeLater() 或 invokeAndWait() 的情况下给出的 happens-before 关系? 这些方法在(分别为 SwingUtiliti
我一直在使用以下方法创建组件并从 Swing 向/从 EDT 外部返回值。例如,以下方法可以是 JFrame 的扩展,以创建一个 JPanel 并将其添加到父级 JFrame: public JPan
我偶然发现了一个使用 invokeAndWait 的问题。下面的示例代码说明了这个问题。谁能详细说明发生了什么?为什么 lambda 表达式挂起而匿名内部类和方法 ref 没有挂起。 public c
我创建了一个 Swing GUI,它是从其他 Java 类文件调用的。 GUI 的构造函数: public AdviceGUI(AdviceModel model) throws Invocation
我有这个代码: try { SwingUtilities.invokeAndWait(new Runnable() { public void run() {
我正在使用 Eclipse RCP 和 Swing 开发一个项目。我看到两对方法 invokeLater()/invokeAndWait() 和 asyncExec()/syncExec() 被大量使
编辑:我已经提到了这个link并且我能够理解 InvokeLater 的代码流。我的问题是,为什么这个逻辑是这样实现的?有什么具体原因吗? 以下是我的代码: private void init()
我是一名优秀的程序员,十分优秀!