- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在尝试将我的旧 Java 程序修改为数字逻辑模拟器,但在某个点之后它停止绘制我初始化的对象。它会绘制白色背景,但仅此而已。请原谅一些违规行为,我最终会让它做的事情比我目前试图做的多得多——现在它甚至不画电线(我已经解决了)。我想做的就是“生成”一个简单的、工作的输入输出电路。
最初,所有内容都返回了名为“未知来源”的错误,但在我切换到 JDK 后,所有错误都归因于 EventDispatchThread 或 EventQueue。这是我的代码,对于困惑表示抱歉:
CircuitLogic.java(主类):启动 JFrame,与之前的程序几乎没有任何修改。
import javax.swing.JFrame;
public class CircuitLogic{
public static void main( String[] args ){
JFrame application = new JFrame( "Circuit Board" );
Board broad = new Board();
application.add(broad);
application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
application.setSize( 800, 600 ); // set frame size
application.setVisible( true ); // display frame
}
}
Board.java:
import java.util.*;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import javax.swing.*;
public class Board extends JPanel
implements MouseListener, MouseMotionListener
{
/** // I don't know what this stuff does, Eclipse added it.
*
*/
private static final long serialVersionUID = 1L;
private ArrayList<InPin> inputs;
private ArrayList<OutPin> gates; //Unused currently
private ArrayList<OutPin> outputs;
// double buffering
private Image backBuffer;
private Graphics gBackBuffer;
boolean isInitialized;
public Board()
{
isInitialized=false;
// handle mouse and mouse motion events
this.addMouseListener(this);
this.addMouseMotionListener(this);
}
void init()
{
// Initial state
inputs = new ArrayList<InPin>();
gates = new ArrayList<OutPin>(); //Unused currently
outputs = new ArrayList<OutPin>();
inputs.add(new InPin(10,10));
outputs.add(new OutPin(500,10));
InPin a = inputs.get(0);
OutPin b = gates.get(0); // line 48
b.attach_in(a);
// create the back buffer
backBuffer = createImage(getSize().width, getSize().height);
gBackBuffer = backBuffer.getGraphics();
}
public void paintComponent( Graphics g )
{
super.paintComponent( g ); // clears drawing area; tried removing this
if (!isInitialized) {
isInitialized=true;
init(); // line 62
}
gBackBuffer.setColor(Color.white);
gBackBuffer.clearRect(0, 0, 800, 700);
for (int i=0; i<inputs.size(); i++) {
inputs.get(i).draw(gBackBuffer);
}
for (int i=0; i<outputs.size(); i++) {
outputs.get(i).check();
outputs.get(i).draw(gBackBuffer);
}
g.drawImage(backBuffer, 0, 0, null);
} // end method paintComponent
public void mouseClicked( MouseEvent e ){
}
public void mousePressed( MouseEvent e ){
if (e.isMetaDown()) return; // ignore right button
for (int i=0; i<inputs.size(); i++) {
InPin p=inputs.get(i);
if (p.hitTest(e.getX(), e.getY())) {
p.toggle();
repaint();
return;
}
}
}
public void mouseReleased( MouseEvent e )
{
// runs a check from the end, backwards
for (int i=0; i<outputs.size(); i++) {
OutPin q=outputs.get(i);
q.check(); // line 102
repaint();
}
}
public void mouseEntered( MouseEvent e ){
}
public void mouseExited( MouseEvent e ){
}
public void mouseMoved( MouseEvent e ){
}
public void mouseDragged( MouseEvent e ){
}
}
InPin.java:
import java.awt.*;
public class InPin{
public int x;
public int y;
public boolean is_on;
public InPin(int xx, int yy){
x = xx;
y = yy;
is_on = false;
}
public InPin(InPin src) { // copy constructor
x = src.x;
y = src.y;
is_on = src.is_on;
}
public void draw(Graphics g){
int[] xpts = {x,x+40,x+60,x+40,x};
int[] ypts = {y,y,y+10,y+20,y+20};
if (is_on) {
g.setColor(Color.green);
}
else{
g.setColor(Color.red);
}
g.fillPolygon(xpts,ypts,5);
}
public boolean hitTest(int mx, int my){
return ((x <= mx && mx <= x + 40) && (y <= my && my <= y+20)); //checks if "main rectangle" is clicked
}
public boolean check(){
return (is_on);
}
public void toggle(){
is_on = !is_on;
}
public int getX(){
return x;
}
public int getY(){
return y;
}
public void setX(int newx){
x = newx;
}
public void setY(int newy){
y = newy;
}
}
OutPin.java:
import java.awt.*;
public class OutPin extends InPin{
public InPin[] ins; // trust me, making this an array will pay off
public OutPin(int xx, int yy) {
super(xx, yy);
ins = new InPin[1];
}
public void draw(Graphics g){
if (is_on) {
g.setColor(Color.green);
}
else{
g.setColor(Color.red);
}
g.fillRect(x,y,50,25);
}
public void attach_in(InPin in){
ins[0] = in;
}
public boolean hitTest(int mx, int my){ //practically unused
return ((x <= mx && mx <= x + 50) && (y <= my && my <= y+25));
}
public boolean check(){
is_on = (ins[0].check()); // line 27
return (is_on);
}
}
错误消息:(运行应用程序并单击一次后)
Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.rangeCheck(ArrayList.java:653)
at java.util.ArrayList.get(ArrayList.java:429)
at Board.init(Board.java:48)
at Board.paintComponent(Board.java:62)
at javax.swing.JComponent.paint(JComponent.java:1056)
at javax.swing.JComponent.paintChildren(JComponent.java:889)
at javax.swing.JComponent.paint(JComponent.java:1065)
at javax.swing.JComponent.paintChildren(JComponent.java:889)
at javax.swing.JComponent.paint(JComponent.java:1065)
at javax.swing.JLayeredPane.paint(JLayeredPane.java:586)
at javax.swing.JComponent.paintChildren(JComponent.java:889)
at javax.swing.JComponent.paintToOffscreen(JComponent.java:5226)
at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1572)
at javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1495)
at javax.swing.RepaintManager.paint(RepaintManager.java:1265)
at javax.swing.JComponent.paint(JComponent.java:1042)
at java.awt.GraphicsCallback$PaintCallback.run(GraphicsCallback.java:39)
at sun.awt.SunGraphicsCallback.runOneComponent(SunGraphicsCallback.java:79)
at sun.awt.SunGraphicsCallback.runComponents(SunGraphicsCallback.java:116)
at java.awt.Container.paint(Container.java:1973)
at java.awt.Window.paint(Window.java:3912)
at javax.swing.RepaintManager$4.run(RepaintManager.java:835)
at javax.swing.RepaintManager$4.run(RepaintManager.java:807)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:807)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:782)
at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:731)
at javax.swing.RepaintManager.access$1300(RepaintManager.java:64)
at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1720)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:749)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:702)
at java.awt.EventQueue$3.run(EventQueue.java:696)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:719)
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)
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at OutPin.check(OutPin.java:27)
at Board.mouseReleased(Board.java:102)
at java.awt.Component.processMouseEvent(Component.java:6525)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
at java.awt.Component.processEvent(Component.java:6290)
at java.awt.Container.processEvent(Container.java:2234)
at java.awt.Component.dispatchEventImpl(Component.java:4881)
at java.awt.Container.dispatchEventImpl(Container.java:2292)
at java.awt.Component.dispatchEvent(Component.java:4703)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4898)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4533)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4462)
at java.awt.Container.dispatchEventImpl(Container.java:2278)
at java.awt.Window.dispatchEventImpl(Window.java:2750)
at java.awt.Component.dispatchEvent(Component.java:4703)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:751)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:702)
at java.awt.EventQueue$3.run(EventQueue.java:696)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:86)
at java.awt.EventQueue$4.run(EventQueue.java:724)
at java.awt.EventQueue$4.run(EventQueue.java:722)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:721)
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)
最佳答案
gates = new ArrayList<OutPin>(); //Unused currently
...
OutPin b = gates.get(0); // line 48
gates
为空,没有元素号 0。这就是您收到 IndexOutOfBoundsException
的原因。您可能打算改为执行 outputs.get(0)
。
关于Java 在 Eclipse 中遇到未知错误 - 不会绘制对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28634063/
我需要将文本放在 中在一个 Div 中,在另一个 Div 中,在另一个 Div 中。所以这是它的样子: #document Change PIN
奇怪的事情发生了。 我有一个基本的 html 代码。 html,头部, body 。(因为我收到了一些反对票,这里是完整的代码) 这是我的CSS: html { backgroun
我正在尝试将 Assets 中的一组图像加载到 UICollectionview 中存在的 ImageView 中,但每当我运行应用程序时它都会显示错误。而且也没有显示图像。 我在ViewDidLoa
我需要根据带参数的 perl 脚本的输出更改一些环境变量。在 tcsh 中,我可以使用别名命令来评估 perl 脚本的输出。 tcsh: alias setsdk 'eval `/localhome/
我使用 Windows 身份验证创建了一个新的 Blazor(服务器端)应用程序,并使用 IIS Express 运行它。它将显示一条消息“Hello Domain\User!”来自右上方的以下 Ra
这是我的方法 void login(Event event);我想知道 Kotlin 中应该如何 最佳答案 在 Kotlin 中通配符运算符是 * 。它指示编译器它是未知的,但一旦知道,就不会有其他类
看下面的代码 for story in book if story.title.length < 140 - var story
我正在尝试用 C 语言学习字符串处理。我写了一个程序,它存储了一些音乐轨道,并帮助用户检查他/她想到的歌曲是否存在于存储的轨道中。这是通过要求用户输入一串字符来完成的。然后程序使用 strstr()
我正在学习 sscanf 并遇到如下格式字符串: sscanf("%[^:]:%[^*=]%*[*=]%n",a,b,&c); 我理解 %[^:] 部分意味着扫描直到遇到 ':' 并将其分配给 a。:
def char_check(x,y): if (str(x) in y or x.find(y) > -1) or (str(y) in x or y.find(x) > -1):
我有一种情况,我想将文本文件中的现有行包含到一个新 block 中。 line 1 line 2 line in block line 3 line 4 应该变成 line 1 line 2 line
我有一个新项目,我正在尝试设置 Django 调试工具栏。首先,我尝试了快速设置,它只涉及将 'debug_toolbar' 添加到我的已安装应用程序列表中。有了这个,当我转到我的根 URL 时,调试
在 Matlab 中,如果我有一个函数 f,例如签名是 f(a,b,c),我可以创建一个只有一个变量 b 的函数,它将使用固定的 a=a1 和 c=c1 调用 f: g = @(b) f(a1, b,
我不明白为什么 ForEach 中的元素之间有多余的垂直间距在 VStack 里面在 ScrollView 里面使用 GeometryReader 时渲染自定义水平分隔线。 Scrol
我想知道,是否有关于何时使用 session 和 cookie 的指南或最佳实践? 什么应该和什么不应该存储在其中?谢谢! 最佳答案 这些文档很好地了解了 session cookie 的安全问题以及
我在 scipy/numpy 中有一个 Nx3 矩阵,我想用它制作一个 3 维条形图,其中 X 轴和 Y 轴由矩阵的第一列和第二列的值、高度确定每个条形的 是矩阵中的第三列,条形的数量由 N 确定。
假设我用两种不同的方式初始化信号量 sem_init(&randomsem,0,1) sem_init(&randomsem,0,0) 现在, sem_wait(&randomsem) 在这两种情况下
我怀疑该值如何存储在“WORD”中,因为 PStr 包含实际输出。? 既然Pstr中存储的是小写到大写的字母,那么在printf中如何将其给出为“WORD”。有人可以吗?解释一下? #include
我有一个 3x3 数组: var my_array = [[0,1,2], [3,4,5], [6,7,8]]; 并想获得它的第一个 2
我意识到您可以使用如下方式轻松检查焦点: var hasFocus = true; $(window).blur(function(){ hasFocus = false; }); $(win
我是一名优秀的程序员,十分优秀!