列出您最喜欢的堆分析工具(例如jprofiler,jmap,...).让我们为每个答案保留一个工具,并列出每个工具的优缺点.
现在,我的主要是用10行调用一个gui.根据这些行中有多少行有文本,调用9个类中的1个(两行必须有文本).被调用的类执行计算,我希望将进度条绑定到.以下是其中一个被调用类的示例(每个类都相似,但足够不同以保证新类.)我认为问题违反了EDT规则,但我在其上看到的所有示例都涉及到论点.运行代码时会出现框架,但在完成所有计算之前,进度条不会更新.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class twoLoan extends JFrame {
static JFrame progressFrame;
static JProgressBar progressBar;
static Container pane;
double amountSaved = 0;
int i = 0;
public void runCalcs(Double MP, Double StepAmt,
Double L1, Double L2, Double C1, Double C2,
Double IM1, Double IM2, Double M1Start, Double M2Start) {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {
}
int iterations = (int) (MP - (M1Start * M2Start));
//Create all components
progressFrame = new JFrame("Calculation Progress");
progressFrame.setSize(300, …Run Code Online (Sandbox Code Playgroud) 请考虑以下代码片段:
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.lang.reflect.InvocationTargetException;
import javax.swing.*;
public class TestApplet extends JApplet
{
@Override
public void init()
{
try
{
SwingUtilities.invokeAndWait(new Runnable()
{
@Override
public void run()
{
createGUI();
}
});
}
catch(InterruptedException | InvocationTargetException ex)
{
}
}
private void createGUI()
{
getContentPane().setLayout(new FlowLayout());
JButton startButton = new JButton("Do work");
startButton.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent ae)
{
JLabel label = new JLabel();
new Worker(label).execute();
}
});
getContentPane().add(startButton);
}
private class Worker extends SwingWorker<Void, …Run Code Online (Sandbox Code Playgroud) 我投降.现在尝试几周,找出阻止接收的串行数据被我的代码的图形部分更新的内容.首次使用Java编程.有大约15年的微程序编程经验,我习惯于解决自己的问题,但这超出了这种策略的效率.我的应用程序包含两个文件.
一个文件源于RXTX项目,并且每秒两次捕获以几个数据包发送的串行数据.这就像一个魅力(花了一些时间),我可以看到捕获的数据是正确和稳定的.
另一个文件是图形文件,由大约80个菜单组成,最终用户可以阅读并有时写入值.到目前为止,导航是通过按钮和滚动条上的鼠标事件完成的.这部分也可以正常工作.可以读取,更改和保存值等.
我遇到的部分是来自串行文件的更新值永远不会更新图形屏幕.试图跟随数百个示例和教程(很多来自这个网站)没有运气.
对象相关语言的概念对我来说是新的,但仍然令人困惑.很确定我的问题涉及继承和类.线程是另一个候选人......已经将代码减少到仍然会运行并呈现我的问题的最小尺寸,并希望有人可以看到什么是错误的.
package components;
import gnu.io.CommPort;
import gnu.io.CommPortIdentifier;
import gnu.io.SerialPort;
import gnu.io.SerialPortEvent;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.swing.SwingUtilities;
public class SerialComm extends ScreenBuilder implements java.util.EventListener {
InputStream in;
public SerialComm() {
super();
}
public interface SerialPortEventListener
extends java.util.EventListener {
}
void connect(String portName) throws Exception {
CommPortIdentifier portIdentifier = CommPortIdentifier.getPortIdentifier("COM1");
if (portIdentifier.isCurrentlyOwned()) {
System.out.println("Error: Port is currently in use");
} else {
CommPortIdentifier.getPortIdentifier("COM1");
System.out.println("" + portName);
CommPort commPort = portIdentifier.open("COM1", 2000);
if (commPort instanceof SerialPort) …Run Code Online (Sandbox Code Playgroud) 我有一个秋千 JTable使用大量数据动态更新 - 不断添加新行,并在几分钟内添加1000-2000行.我已经注册了一个Listener来响应使用的单行选择事件来执行一些工作人员.我已经使用Observer模式进行Swing数据绑定,并且表的模型由WritableList实现支持.因此,新项目将从其自己的Realm添加到表中.并且从SWT UI线程添加了Listener.问题是,当新行添加到表时,它不会立即响应用户行选择事件.只有在停止更新表格模型时,表格才会响应用户选择 - 有时会延迟30-60秒.请帮助我解释为什么我的表模型在深度更新时不会立即响应用户选择,以及如何克服此限制.
java ×5
swing ×4
swingworker ×2
concurrency ×1
heap ×1
inheritance ×1
jprogressbar ×1
memory ×1
profiling ×1
serial-port ×1
wait ×1