我使用SWING API编写了一个GUI。
我有一组表单,每个表单都帮助用户创建预定义类型的对象。完成后,用户通过单击JButton确认创建。
我得到了一个遵循单例模式的类(DataManager)。此外,该类遵循观察者和工厂模式。DataManager是一个可观察的对象。观察到的数据格式如下:
public static List<Target> targets = new ArrayList<Target>();
DataManager类包含一组方法,用于创建对象的预定义类型<示例:
public static final void createTarget(String id, double x, double y, double z){
targets.add(new Target(id,x,y,z));
notifyTargetObservers();
}
其中一种形式是观察者对象,它观察DataManager在其列表(例如列表目标…)中保存的任何数据中的更新。
IObserve:
public interface IObserve {
public void updateTargets();
public void updateSources();
public void updateFluids();
}
观测器实现了IObserver中引入的方法<示例:
@Override
public void updateTargets(){
cbAnalysisTargets.addItem(DataManager.targets.get(DataManager.targets.size()-1));
}
cbAnalysisTargets是一个JComboBox,当新对象引入到环境中时,它需要动态更新<可观察:
public abstract class IObservable {
private static Set<IObserve> targetObservers = new HashSet<IObserve>();
private static Set<IObserve> sourceObservers = new HashSet<IObserve>();
private static Set<IObserve> fluidObservers = new HashSet<IObserve>();
public final void addTargetObserver(IObserve o){
targetObservers.add(o);
}
public final void addSourceObserver(IObserve o){
sourceObservers.add(o);
}
public final void addFluidObserver(IObserve o){
fluidObservers.add(o);
}
public static final void notifyTargetObservers(){
for(IObserve observer : targetObservers){
observer.updateTargets();
}
}
public static final void notifySourceObservers(){
for(IObserve observer : sourceObservers){
observer.updateSources();
}
}
public static final void notifyFluidObservers(){
for(IObserve observer : fluidObservers){
observer.updateFluids();
}
}
}
问题出在IndexOutOfBound Exception中。异常出现在以下场景中:
1.用户打开第一个表单并成功启动创建2个相同类型的预定义对象。
2.用户打开第二个表单;填写表单并在确认后(单击按钮)收到以下声明的异常。
理想情况下,我希望在解决以下问题和解决以下例外情况方面得到帮助。
例外:
异常在线程"AWT-EventQueue-0"andler.actionIndexOutOfBoundsException: Index: 1, size: 1 atjavax.swing.ArrayLodel.fire检查(未知来源)atjavax.swing.ArrayLodel.set(未知来源)atjavax.swing.plaf.basic.Analysis CreatorPistener.mouse源(Analysis CreatorPjava.awt.)atomponent.processIOjavax.swing.SourceObserver(IOomponent.process)atjava.awt.IDataMomponent.processSource(IDataManager.java:29)atfprof.application.data.frame.manager.content.SourceCreatorGroup$1.action执行(SourceCreatorPanel.java:127)atjavax.swing.AbstractButton.fire动作执行(未知来源)atjavax.swing.AbstractButton$Hjava.lang.执行(未知来源)atjava.util.DefaultButtonMist.range动作执行(未知来源)atjava.util.DefaultButtonMist.get按(未知来源)atfprof.application.data.frame.manager.content.BasicButtonLanel.update发布(未知来源)atanel.java:99Cfprof.application.utility.MouseEvent(未知来源)atbservable.notifyJCbservable.java:32MouseEvent(未知来源)atfprof.application.data.manager.Canager.createEvent(未知来源)at java. awa在java. awt上的轻量级调度器.进程MouseEvent(未知源)在java. awt上的轻量级调度器.调度事件(未知源)在java. awt上的容器.调度事件Impl(未知源)在java. awt上的窗口.调度事件Impl(未知源)在java. awt上的组件.调度事件(未知源)在java. awt上的事件队列.调度事件Impl(未知源)在java. awt上的事件队列. access 500美元(未知源)在java. awt上的事件队列3美元. run(未知源)在java. awt上的事件队列3美元. run(未知源)在java. security上的未知源。java. security上的AccessController. doPrivileged(本机方法)。java. security上的保护域1美元. doIntersectionPrivilge(未知源)。保护域1美元. doIntersectionPriijava. awt上的EventDispatchThread.泵浦事件(未知源)。java. awt上的EventDispatchThread.泵浦事件(未知源)。EventDispatchThread. run(未知源)
编辑1:updateSource方法:
@Override
public void updateSources(){
cbAnalysisSources.addItem(DataManager.sources.get(DataManager.sources.size()-1));
}
Eclipse中基本调试的一些介绍,因为这非常重要,可以解决几乎所有的错误和错误。Eclipse可以帮助您做很多事情,但我将向您展示基础知识,您可以从那里阅读和探索。尽管如此,它还是很有用的。
我做了一段简单的代码来处理:
public class Example {
public static void main(String[] args) {
int[] array = new int[] {12, 14, 523, 5423, 12, 0 ,14, -3, 521, 2};
int pos = 0;
for (int i = 0; i < 16; i++) {
array[i] = -1;
pos = increment(pos);
}
}
static int increment(int pos) {
int num = pos + 1;
return num;
}
}
如果您运行它,它将抛出一个“ArrayIndexOutOfBoundsException”。为了调试,我们需要在代码中我们认为问题开始的地方设置断点,可能靠近引发异常的行。断点背后的想法是,代码到达标记有断点的行时将停止运行。双击编辑器中相应行旁边的左栏可以输入断点(请参见红色圆圈)。您可以在不同的位置输入多个断点。然后,单击调试按钮(黄色圆圈)。确保它不是“运行”按钮,因为这样会忽略断点。
然后,您将进入调试透视图,该透视图提供了不同的视图(我的视图从默认视图重新排列):
你在这里看到的是:
现在转到“调试本身”。您可以在“运行”菜单下找到许多选项,但有用的选项有:
F6-跳过
:这将在跳过方法调用时前进到代码中的下一行。F5-进入
:这将前进到代码中的下一行并输入方法调用。请注意,如果您有JDK(或附加源代码的JRE),它将进入Oracle的库,这通常不是您想要的。有时他们的代码非常复杂,如果您继续进入它,您可能永远不会回来...F8-恢复
:这将运行代码,直到到达下一个断点。例如,如果您在循环中运行,它可以是编辑器中的相同断点。F7-步骤返回
:这将运行代码,直到当前方法返回(如果适用)。Ctrl-R-运行到行
:这将运行代码,直到您放置插入符号的行。演示:
试着在更复杂的情况下运行调试器,直到您感觉舒服为止。您可以将pos更改为i,使程序更有趣。这是
如何避免IndexOutOfBounds异常。
如果您有任何问题,请留下评论。
我正在尝试更新此代码以处理Discord。jsv12。我遇到了一个错误,我有点困惑于如何修复这个错误。我已经更新了一些代码来处理Discord。jsv12。 client.channels.fetch... 在客户端。(/home/runner/Log/index.js:44:40)在客户端。在客户端发出(events.js:314:20)。事件发射器。在MessageCreateAction处发
问题内容: 我正在从数据库中成功获取数据值。我也将它们存储到一个数组中。我需要将String数组作为项的加载,以响应执行的关键操作。每当获取按键值时,如何获取按键值,就如何重新加载项目。相反,我需要动态刷新项目。 问题答案:
问题内容: 我有一个带有标题的表,一个带有输入字段的行,一个带有数据的行。像这样。http://brow.hu/sitegen/stackoverflow_table_example.png 如果有人在输入字段中输入内容,我想使用ajax查询过滤数据。收到新表后,我更改了旧表的内容: 并闪烁。如何避免呢? 问题答案: 避免闪烁的一种方法称为双缓冲。在Ajax中,只需两个div占用相同的空间即可完成
我正在用反应原生构建一个项目。我有一个动态的玩家列表,我希望用户能够编辑。 我想实现的是: 用户输入名称 用户按enter键 我们称之为addPlayer,它添加一个播放器 新的输入出现并得到关注(通过其他功能) 我得到的是: < li >用户输入姓名 < li >用户按enter键 < li >我们调用addPlayer来添加播放器 < li >键盘开始关闭一会儿,然后在新输入出现时重新打开。
问题内容: 我正在研究从文件读取大量数据的应用程序。基本上,我有一个巨大的文件(大约1.5-2个演出),其中包含不同的对象(每个文件约5至1000万个对象)。我需要阅读所有内容,并将其放置在应用程序中的不同地图上。问题是该应用程序在某些时候读取对象时内存不足。仅当我将其设置为使用- Xmx4096m时,它才能处理该文件。但是,如果文件更大,它将无法再执行此操作。 这是代码片段: 首先,我使用的是
问题内容: 更新记录时,我反复出现锁定超时超出异常的情况。 我正在使用Java Struts 2.1 Hibernate配置。使用的数据库是MYSQL。 任何人都知道如何解决它。 问题答案: 这里有一些建议: “ 锁定等待超时 ”通常发生在事务正在等待要更新的数据行上,而该行已被某些其他事务锁定时。 在大多数情况下,问题出在数据库方面。可能的原因可能是表格设计不当,数据量大,约束等。 请查看这个详