- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在创建一个 Java swing 应用程序 - 排序和搜索算法的动画。我使用 JDeveloper 11g release2 编写代码,女巫默认使用 jdk 1.6,应用程序运行良好,但部署后我尝试在我的计算机上运行它女巫有 jdk 1.7 并且应用程序随机卡住并且无法恢复。我在每个人身上尝试了不同的 pc 和操作系统该应用程序在 java 6 上运行良好但如果使用 java 7 启动时会卡住任务管理器。
我设法追踪到应用程序在尝试设置文本时在方法 - descriptionTA.setText(text)(下面类的最后一个方法)处卡住,有时它设置正确,但大多数时候一切都停止了没有错误信息或其他生命信号。
这是出现问题的类(class)。
import animatedalgorithms.MasterFrame;
import animatedalgorithms.sorting.SortAnimationComponent;
import helperclasses.ApplicationConstants;
import helperclasses.RenderedJLabel;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.TreeMap;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.JTextArea;
import javax.swing.border.Border;
import javax.swing.border.EmptyBorder;
import javax.swing.border.LineBorder;
import javax.swing.border.TitledBorder;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class SortAnimationPanel extends JPanel {
private static final int DESCENDING_EELMENT_ORDER = 0;
private static final int ASCENDING_ELEMEMENT_ORDER = 1;
private static final int RANDOM_ELEMENT_ORDER = 2;
private MasterFrame frame;
private SortAnimationComponent comp;
private RenderedJLabel h1;
private JSlider algSlider;
private JSlider animSlider;
BackButtonComponent backBtn;
private int elmOrder;
private JTextArea descriptionTA ;
public SortAnimationPanel(MasterFrame frame) {
elmOrder = RANDOM_ELEMENT_ORDER;
this.setBorder(new LineBorder(Color.black));
this.frame = frame;
this.setLayout(new BorderLayout());
h1 = new RenderedJLabel("");
h1.setFont(new Font("Segoe UI Semibold", Font.PLAIN, 20));
h1.setForeground(Color.white);
createControls();
}
public void createControls() {
// Header
JPanel header = new JPanel();
header.setLayout(new BorderLayout());
header.setBackground(new Color(30, 30, 30));
header.setBorder(new EmptyBorder(0, 10, 5, 5));
header.setForeground(Color.WHITE);
header.add(h1, BorderLayout.CENTER);
JPanel aboutBtn = new JPanel();
aboutBtn.setName("aboutPanel");
aboutBtn.setBackground(Color.BLACK);
final RenderedJLabel aboutLabel = new RenderedJLabel("Apie algoritmą");
aboutLabel.setForeground(Color.WHITE);
aboutLabel.setFont(new Font("Arial", Font.BOLD, 12));
aboutBtn.add(aboutLabel);
header.add(aboutBtn, BorderLayout.EAST);
add(header, BorderLayout.NORTH);
//Bottom controls
JButton btn = new JButton("Iš naujo");
btn.setName("replay");
JButton btnPlay = new JButton("Rikiuoti");
btnPlay.setName("play");
JButton btnPause = new JButton("Pauzė");
btnPause.setName("pause");
JButton btnStep = new JButton("Žingsnis");
btnStep.setName("step");
backBtn = new BackButtonComponent();
JPanel controls = new JPanel();
controls.setLayout(new BoxLayout(controls, BoxLayout.X_AXIS));
controls.setBackground(Color.WHITE);
controls.add(btn);
controls.add(btnPlay);
controls.add(btnPause);
controls.add(btnStep);
controls.add(Box.createHorizontalStrut(10));
Border empty = BorderFactory.createEmptyBorder(10, 10, 30, 10);
controls.setBorder(empty);
JPanel labels = new JPanel();
labels.setLayout(new BoxLayout(labels, BoxLayout.Y_AXIS));
labels.add(new JLabel("Algoritmo greitis: "));
labels.add(new JLabel("Animacijos greitis: "));
labels.setBackground(Color.WHITE);
controls.add(labels);
JPanel sliders = new JPanel();
sliders.setBackground(Color.WHITE);
sliders.setLayout(new BoxLayout(sliders, BoxLayout.Y_AXIS));
algSlider = new JSlider(JSlider.HORIZONTAL, 100, 10000, 10000 - ApplicationConstants.DEFAULT_ALGORITHM_DELAY);
algSlider.setBackground(Color.WHITE);
algSlider.setMajorTickSpacing(2000);
algSlider.setMinorTickSpacing(100);
animSlider = new JSlider(JSlider.HORIZONTAL, 0, 20, 10);
animSlider.setMajorTickSpacing(10);
animSlider.setBackground(Color.WHITE);
animSlider.setMinorTickSpacing(2);
sliders.add(algSlider);
sliders.add(animSlider);
controls.add(Box.createHorizontalStrut(10));
controls.add(sliders);
class ButtonListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
JButton eventObj = (JButton)e.getSource();
if (eventObj.getName().equalsIgnoreCase("play")) {
comp.setToPlay();
} else if (eventObj.getName().equalsIgnoreCase("pause")) {
comp.setToPause();
} else if (eventObj.getName().equalsIgnoreCase("replay")) {
resetControls();
switch (elmOrder) {
case RANDOM_ELEMENT_ORDER:
comp.generateRandomArray();
break;
case ASCENDING_ELEMEMENT_ORDER:
comp.generateAscendingArray();
break;
case DESCENDING_EELMENT_ORDER:
comp.generateDescendingArray();
break;
}
comp.resetSorter();
comp.startAnimation();
} else if (eventObj.getName().equalsIgnoreCase("step")) {
comp.step();
}
}
}
class CustomMouseListener implements MouseListener {
boolean pressed = false;
@Override
public void mouseClicked(MouseEvent e) {
}
@Override
public void mousePressed(MouseEvent e) {
pressed = true;
}
@Override
public void mouseReleased(MouseEvent e) {
if (pressed) {
if (e.getSource() instanceof JPanel) {
JFrame aboutFrame = new DescriptionFrame(comp.getAlgorithmNum());
} else {
comp.stopThread();
frame.setVisibleCard(MasterFrame.MENU_WINDOW);
}
}
}
@Override
public void mouseEntered(MouseEvent e) {
if (e.getSource() instanceof JPanel) {
JPanel p = (JPanel) e.getSource();
p.setBackground(Color.WHITE);
aboutLabel.setForeground(Color.black);
} else {
BackButtonComponent comp = (BackButtonComponent)e.getSource();
comp.setCompColor(Color.lightGray);
comp.repaint();
}
}
@Override
public void mouseExited(MouseEvent e) {
if (e.getSource() instanceof JPanel) {
JPanel p = (JPanel) e.getSource();
p.setBackground(Color.black);
aboutLabel.setForeground(Color.white);
} else {
BackButtonComponent comp = (BackButtonComponent)e.getSource();
comp.setCompColor(Color.GRAY);
comp.repaint();
pressed = false;
}
}
}
class SliderListener implements ChangeListener {
@Override
public void stateChanged(ChangeEvent e) {
JSlider source = (JSlider)e.getSource();
if (!source.getValueIsAdjusting()) {
if (source.getMaximum() == 20) {
comp.setAnimationDelay(source.getMaximum() - source.getValue());
} else {
comp.setAlgorithmStepDelay(source.getMaximum() - source.getValue());
}
}
}
}
ActionListener btnListener = new ButtonListener();
btn.addActionListener(btnListener);
btnPlay.addActionListener(btnListener);
btnStep.addActionListener(btnListener);
btnPause.addActionListener(btnListener);
CustomMouseListener l = new CustomMouseListener();
backBtn.addMouseListener(l);
aboutBtn.addMouseListener(l);
ChangeListener sliderListener = new SliderListener();
algSlider.addChangeListener(sliderListener);
animSlider.addChangeListener(sliderListener);
add(controls, BorderLayout.SOUTH);
}
public void createLeftMenu() {
}
public void resetControls() {
algSlider.setValue(algSlider.getMaximum() - ApplicationConstants.DEFAULT_ALGORITHM_DELAY);
animSlider.setValue(animSlider.getMaximum() - ApplicationConstants.DEFAULT_ANIMATION_DELAY);
}
public void loadAlgorithm(int sorterNum) {
resetControls();
JPanel sortPanel = new JPanel();
sortPanel.setBackground(Color.WHITE);
descriptionTA = new JTextArea();
descriptionTA.setSelectionColor(Color.BLACK);
descriptionTA.setFocusable(false);
descriptionTA.setEnabled(true);
descriptionTA.setRows(5);
descriptionTA.setColumns(10);
descriptionTA.setFont(new Font("Arial", Font.BOLD, 12));
descriptionTA.setWrapStyleWord(true);
descriptionTA.setLineWrap(true);
TitledBorder title = BorderFactory.createTitledBorder("Aprašymas");
descriptionTA.setBorder(title);
HistoryComponent hist = new HistoryComponent(new TreeMap<String, Color>(), 30);
TreeMap<String, Color> map = new TreeMap<String, Color>();
switch (sorterNum) {
case ApplicationConstants.SELECTION_SORT_NUM:
h1.setText("Išrinkimo rikiavimo algoritmas");
map.put("- Mažiausias elementas", ApplicationConstants.IMPORTANT_ELEMENT_COLOR);
map.put("- Pasirinktas elementas", ApplicationConstants.SELECTED_ELEMENT_COLOR);
map.put("- Neutralus elementas", ApplicationConstants.NEUTRAL_ELEMENT_COLOR);
map.put("- Surikiuotas masyvas", ApplicationConstants.SORTED_ELEMENT_COLOR);
hist.setMap(map);
hist.repaint();
comp = new SortAnimationComponent(ApplicationConstants.SELECTION_SORT_NUM, this);
comp.setToPause();
comp.startAnimation();
break;
case ApplicationConstants.BUBBLE_SORT_NUM:
h1.setText("Burbulo rikiavimo algoritmas");
map.put("- Pasirinktas elementas", ApplicationConstants.SELECTED_ELEMENT_COLOR);
map.put("- Neutralus elementas", ApplicationConstants.NEUTRAL_ELEMENT_COLOR);
hist.setMap(map);
hist.repaint();
comp = new SortAnimationComponent(ApplicationConstants.BUBBLE_SORT_NUM, this);
comp.setToPause();
comp.startAnimation();
break;
case ApplicationConstants.INSERTION_SORT_NUM:
h1.setText("Įterpimo rikiavimo algoritmas");
map.put("- Surikiuotas masyvas", ApplicationConstants.SORTED_ELEMENT_COLOR);
map.put("- Pasirinktas elementas", ApplicationConstants.SELECTED_ELEMENT_COLOR);
map.put("- Neutralus elementas", ApplicationConstants.NEUTRAL_ELEMENT_COLOR);
hist.setMap(map);
hist.repaint();
comp = new SortAnimationComponent(ApplicationConstants.INSERTION_SORT_NUM, this);
comp.setToPause();
comp.startAnimation();
break;
case ApplicationConstants.QUICK_SORT_NUM:
h1.setText("Greitojo rikiavimo algoritmas");
map.put("- Vidurio taškas ", ApplicationConstants.IMPORTANT_ELEMENT_COLOR);
map.put("- Neutralus elementas", ApplicationConstants.NEUTRAL_ELEMENT_COLOR);
map.put("- Neaktyvus elementas", ApplicationConstants.INACTIVE_ELEMENT_COLOR);
hist.setMap(map);
hist.repaint();
comp = new SortAnimationComponent(ApplicationConstants.QUICK_SORT_NUM, this);
comp.setToPause();
comp.startAnimation();
break;
case ApplicationConstants.MERGE_SORT_NUM:
h1.setText("Suliejimo rikiavimo algoritmas");
map.put("- Neutralus elementas", ApplicationConstants.NEUTRAL_ELEMENT_COLOR);
map.put("- Neaktyvus elementas", ApplicationConstants.INACTIVE_ELEMENT_COLOR);
hist.setMap(map);
hist.repaint();
comp = new SortAnimationComponent(ApplicationConstants.MERGE_SORT_NUM, this);
comp.setToPause();
comp.startAnimation();
break;
default:
h1.setText("Išrinkimo rikiavimo algoritmas");
map.put("- Mažiausias elementas", ApplicationConstants.IMPORTANT_ELEMENT_COLOR);
map.put("- Pasirinktas elementas", ApplicationConstants.SELECTED_ELEMENT_COLOR);
map.put("- Neutralus elementas", ApplicationConstants.NEUTRAL_ELEMENT_COLOR);
hist.setMap(map);
hist.repaint();
comp = new SortAnimationComponent(ApplicationConstants.SELECTION_SORT_NUM, this);
comp.setToPause();
comp.startAnimation();
break;
}
JPanel leftPanel = new JPanel();
leftPanel.setLayout(new BorderLayout());
leftPanel.setBackground(Color.WHITE);
JPanel spacer = new JPanel();
spacer.setBackground(Color.white);
spacer.setLayout(new BoxLayout(spacer, BoxLayout.X_AXIS));
spacer.add(backBtn);
spacer.add(Box.createHorizontalStrut(120));
leftPanel.add(spacer, BorderLayout.NORTH);
JPanel elmOrderPanel = new JPanel();
elmOrderPanel.setLayout(new BoxLayout(elmOrderPanel, BoxLayout.Y_AXIS));
elmOrderPanel.setBorder(BorderFactory.createTitledBorder("Elementų išdėstymas"));
JButton ascBtn = new JButton("Didėjimo tvarka");
ascBtn.setName("ascBtn");
JButton descBtn = new JButton("Mažėjimo tvarka");
descBtn.setName("descBtn");
JButton randBtn = new JButton("Atsitiktine tvarka");
randBtn.setName("randBtn");
elmOrderPanel.add(ascBtn);
elmOrderPanel.add(descBtn);
elmOrderPanel.add(randBtn);
elmOrderPanel.setBackground(Color.WHITE);
leftPanel.add(elmOrderPanel, BorderLayout.SOUTH);
TitledBorder colorBorder = BorderFactory.createTitledBorder("Spalvų reikšmės");
hist.setBorder(colorBorder);
leftPanel.add(hist, BorderLayout.CENTER);
class ButtonListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
JButton eventObj = (JButton)e.getSource();
if (eventObj.getName().equalsIgnoreCase("randBtn")) {
resetControls();
comp.generateRandomArray();
comp.resetSorter();
comp.startAnimation();
elmOrder = RANDOM_ELEMENT_ORDER;
} else if (eventObj.getName().equalsIgnoreCase("descBtn")) {
resetControls();
comp.generateDescendingArray();
comp.resetSorter();
comp.startAnimation();
elmOrder = DESCENDING_EELMENT_ORDER;
} else if (eventObj.getName().equalsIgnoreCase("ascBtn")) {
resetControls();
comp.generateAscendingArray();
comp.resetSorter();
comp.startAnimation();
elmOrder = ASCENDING_ELEMEMENT_ORDER;
}
}
}
ButtonListener l = new ButtonListener();
ascBtn.addActionListener(l);
descBtn.addActionListener(l);
randBtn.addActionListener(l);
sortPanel.setLayout(new BorderLayout());
sortPanel.add(comp, BorderLayout.CENTER);
sortPanel.add(descriptionTA, BorderLayout.SOUTH);
sortPanel.add(leftPanel, BorderLayout.WEST);
add(sortPanel, BorderLayout.CENTER);
this.updateUI();
}
public void setDescriptionText(String text){
descriptionTA.setText(text);
}
}
setDescriptionText 从另一个线程调用,该线程管理 JtextArea 上方面板中的动画并在其中设置文本。
对我来说奇怪的是它与 java 7 之前的版本完美配合。
如果您需要更多代码来检测问题,请告诉我。
最佳答案
您应该确保在 EventDispatchedThread 上调用了 descriptionTA.setText():
public void setDescriptionText(String text){
Runnable toEDT = new Runnable() {
@Override
public void run() {
descriptionTA.setText(text);
}
};
if(SwingUtilities.isEventDispatchThread()) {
toEDT.run();
}else {
SwingUtilities.invokeLater(toEDT);
}
}
所有与 UI 相关的操作(实例化、修改等)都应该在 EDT 上进行,以避免死锁或其他有趣的事情。
关于java - 应用程序适用于 java 6 但不适用于 java 7,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16524662/
我正在通过 labrepl 工作,我看到了一些遵循此模式的代码: ;; Pattern (apply #(apply f %&) coll) ;; Concrete example user=> (a
我从未向应用商店提交过应用,但我会在不久的将来提交。 到目前为止,我对为 iPhone 而非 iPad 进行设计感到很自在。 我了解,通过将通用PAID 应用放到应用商店,客户只需支付一次就可以同时使
我有一个应用程序,它使用不同的 Facebook 应用程序(2 个不同的 AppID)在 Facebook 上发布并显示它是“通过 iPhone”/“通过 iPad”。 当 Facebook 应用程序
我有一个要求,我们必须通过将网站源文件保存在本地 iOS 应用程序中来在 iOS 应用程序 Webview 中运行网站。 Angular 需要服务器来运行应用程序,但由于我们将文件保存在本地,我们无法
所以我有一个单页客户端应用程序。 正常流程: 应用程序 -> OAuth2 服务器 -> 应用程序 我们有自己的 OAuth2 服务器,因此人们可以登录应用程序并获取与用户实体关联的 access_t
假设我有一个安装在用户设备上的 Android 应用程序 A,我的应用程序有一个 AppWidget,我们可以让其他 Android 开发人员在其中以每次安装成本为基础发布他们的应用程序推广广告。因此
Secrets of the JavaScript Ninja中有一个例子它提供了以下代码来绕过 JavaScript 的 Math.min() 函数,该函数需要一个可变长度列表。 Example:
当我分别将数组和对象传递给 function.apply() 时,我得到 NaN 的 o/p,但是当我传递对象和数组时,我得到一个数字。为什么会发生这种情况? 由于数组也被视为对象,为什么我无法使用它
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界. 这篇CFSDN的博客文章ASP转换格林威治时间函数DateDiff()应用由作者收集整理,如果你
我正在将列表传递给 map并且想要返回一个带有合并名称的 data.frame 对象。 例如: library(tidyverse) library(broom) mtcars %>% spl
我有一个非常基本的问题,但我不知道如何实现它:我有一个返回数据框,其中每个工具的返回值是按行排列的: tmp<-as.data.frame(t(data.frame(a=rnorm(250,0,1)
我正在使用我的 FB 应用创建群组并邀请用户加入我的应用群组,第一次一切正常。当我尝试创建另一个组时,出现以下错误: {"(OAuthException - #4009) (#4009) 在有更多用户
我们正在开发一款类似于“会说话的本”应用程序的 child 应用程序。它包含大量用于交互式动画的 JPEG 图像序列。 问题是动画在 iPad Air 上播放正常,但在 iPad 2 上播放缓慢或滞后
我关注 clojure 一段时间了,它的一些功能非常令人兴奋(持久数据结构、函数式方法、不可变状态)。然而,由于我仍在学习,我想了解如何在实际场景中应用,证明其好处,然后演化并应用于更复杂的问题。即,
我开发了一个仅使用挪威语的应用程序。该应用程序不使用本地化,因为它应该仅以一种语言(挪威语)显示。但是,我已在 Info.plist 文件中将“本地化 native 开发区域”设置为“no”。我还使用
读完 Anthony's response 后上a style-related parser question ,我试图说服自己编写单体解析器仍然可以相当紧凑。 所以而不是 reference ::
multicore 库中是否有类似 sapply 的东西?还是我必须 unlist(mclapply(..)) 才能实现这一点? 如果它不存在:推理是什么? 提前致谢,如果这是一个愚蠢的问题,我们深表
我喜欢在窗口中弹出结果,以便更容易查看和查找(例如,它们不会随着控制台继续滚动而丢失)。一种方法是使用 sink() 和 file.show()。例如: y <- rnorm(100); x <- r
我有一个如下所示的 spring mvc Controller @RequestMapping(value="/new", method=RequestMethod.POST) public Stri
我正在阅读 StructureMap关于依赖注入(inject),首先有两部分初始化映射,具体类类型的接口(interface),另一部分只是实例化(请求实例)。 第一部分需要配置和设置,这是在 Bo
我是一名优秀的程序员,十分优秀!