- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个带有启动按钮的 JPanel,当按下该按钮时,它会通过 mainFrame 调用 Controller 中的 start() 函数
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if (e.getSource().equals(start)) {
System.out.println("hi");
try {
f.c.start();
} catch (KludgeException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
start() 函数调用askQuesions() 函数,该函数循环处理问题,为问题创建一个问题面板并存储答案。
public void start() throws KludgeException{
System.out.println("start");
askQuestions();
ConductInference();
}
public void askQuestions() throws KludgeException {
QuestionsPanel qp = new QuestionsPanel(main);
for(data.containers.Question q : kludge.getQuestions()){
qp.addQuestion(q.getQuestion(), q.getType());
main.setPanel(qp);
synchronized(this){
while(!next){
try {
wait();
kludge.setSystemValue(q.getValueName(), v);
//System.out.println("waitOver");
} catch (InterruptedException e) {}
}
}
next = false;
//System.out.println("next question");
}
System.out.println("questions over;");
}
这是 mainFrame 中的一个函数,它是一个 JFrame,它设置必要的面板。
public void setPanel(JPanel p){
main.getContentPane().removeAll();
main.getContentPane().add(p);
main.validate();
System.out.println("all removed, added and validated");
}
我的问题是这样...当按下统计按钮时,程序卡在开始面板上并卡住。如果我跳过整个开始面板并告诉它直接进入问题,它就可以正常工作。但我仍然不希望它直接进入问题。由于某种原因,它可以在问题面板之间切换,但不能在 startPanel 和 QuestionPanels 之间切换。
最佳答案
您遇到了并发问题,并且正在 Swing 事件线程上调用长时间运行的代码,该问题将阻止该线程执行其重要工作,例如绘制 GUI 和与用户交互。解决方案是在后台线程(例如 SwingWorker 提供的线程)中执行长时间运行的代码。然后阅读 Swing 并发性:
Lesson: Concurrency in Swing
好吧,我现在确信我最初的建议——使用后台线程——是错误的,相反,您使用 while 循环、同步块(synchronized block)和等待使代码变得过于复杂。是的,这些正在阻塞事件线程,是的,这会限制您的应用程序,使其卡住并完全无响应,但解决方案不是使用后台线程,而是您需要摆脱 while (true)
循环、同步块(synchronized block)和 wait()
调用并在其位置使用事件监听器和回调方法。其确切的接线将取决于我们还不知道的代码,但这就是这个问题的解决方案。例如,问题面板可以通知控制类问题已得到解答,以更改模型的状态,以便它继续处理下一个问题。然后模型发生变化,这可以通知 View 它必须更新自身并现在显示下一个问题。
旁注:
您最好使用 CardLayout 来交换 View ,然后直接交换它们。该教程可以在这里找到:CardLayout tutorial .
关于:main.setPanel(qp);
您似乎正在将 QuestionPanel 重新添加到 for 循环中的 main 中。如果是这样,您只需添加一次。
关于java - contentpane.removeAll 不会删除 JPanel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41429411/
我正在使用 DOJO 的 ContentPane模块。我有一个 div一个 Pane 中的元素,我需要给它一个特定的高度 - 比 ContentPane 的高度小 100 像素使div当您更改 Con
我想要一个具有以下结构的 BorderContainer: 我有这个代码,但它不起作用。底部的高度不起作用,所以我不知道如何修复它。 this.bc = new Bor
我在我的应用程序中使用 dojo 1.9。我在我的 ContentPane 中发布带有 href 的 html 代码。 html 代码有脚本但不起作用。 index.html代码:
我试图摆脱使用 NetBeans 创建简单的 Swing GUI,因此试图更好地理解整个容器/布局机制。我一直在阅读各种内联内容,尤其是 https://docs.oracle.com/javase/
我有以下代码: import java.awt.*; import javax.swing.*; import java.util.ArrayList; import java.util.List;
我正在开发 GUI,并且在 Pane 方面没有遇到任何问题。 我的 GUI 分为两部分(topPane 和 bottomPane)。 我的两个 Pane 上都有按钮和标签,但其中一个按钮功能我想更改背
我的代码有问题,因为我想做的就是显示文本字段和底部的按钮,所以我使用了:setLayout(new FlowLayout()); 但我遇到了一个错误,所以我决定更改为 getContenPane();
同样的事情有两种方式。这些行有什么不同? 第1条语句中使用了 getContentPane() 方法,它的目的是什么?这是第二个陈述的简写 JLabel lblNewLabel = new JLabe
显然,在设置 ContentPane 的 content 属性时,Dojo 会做一些清理工作。例如:如果我将 content 设置为小部件 A,然后将 content 设置为小部件 B,则小部件 A
我有 2 个 html 页面 A 和 B。页面 A 有一个 dojox/layout/contenpane 如下: 我正在使用 ContentPane 的 href 属性(使用 XHR)在 A 中加
我是新手,因此非常感谢建议和帮助。 似乎无法让我的容器 contentPane 显示标题。 我的代码: class CreateStockCodeDetails extends JFrame impl
我正在用 java 创建一个带有圆角的登录窗口。一切正常,请参见图片,但我在使 JFrame/ContentPane 透明方面遇到了挑战。每个角落都有白色区域(如箭头所示),我似乎无法删除这些区域,因
我现在使用的是 dojo 1.8.3,现在我的页面上有一个带有 2 ContentPane 的 BorderContainer。我想听resize事件,代码是这样的 dojo.ready(functi
我有一个 JSP 页面,其中 TabContainer 中有 6 个自定义小部件。代码看起来像这样: Registries"> ...(5 more Co
我在使用 contentPane 时遇到问题。这是有问题的代码: public void graph() { JFrame frame = new JFrame("Graph"); G
据我了解,以下内容设置了 contentPane 的背景颜色。如何将图片设置为背景? 我已经尝试过这些: Setting background images in JFrame JAVA: Ways
所以我在java中有一个snake程序,工作完美,但是在我的Frame类中我无法更改我的JFrame内容 Pane 的背景颜色,我使用getContentPane()。 setBackground(C
我有一个带有启动按钮的 JPanel,当按下该按钮时,它会通过 mainFrame 调用 Controller 中的 start() 函数 public void actionPerformed(Ac
我在 dojo.contentPane 中显示了 100 多个 li 元素的 ul 列表,它显示在扩展 dojo 对话框的自定义对话框中。呈现此 contentPane 时,我希望滚动条自动滑动到第
我正在尝试将通过 dojo.XHRGet 检索到的一些 XML 附加到 dijit.layout.ContentPane。在 Firefox (3.6) 中一切正常,但在 Chrome 中,我只会在特
我是一名优秀的程序员,十分优秀!