Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何开始优化Java代码CPU为100%_Java_Class_Function_Jframe_Jpanel - Fatal编程技术网

如何开始优化Java代码CPU为100%

如何开始优化Java代码CPU为100%,java,class,function,jframe,jpanel,Java,Class,Function,Jframe,Jpanel,我写了一个应用程序,但出于某种原因,它一直在100%的峰值。我在一些类上运行了一个profile r,一个报告显示isReset()和isRunning()似乎被调用了很多次。你有什么不对劲吗?请告诉我。谢谢 类1是唯一使用isReset()代码的类,所以我希望这有助于检测错误 一级 package SKA; /* * ver 0.32 June 2009 * * Bug Fix Release: * * Fixed Array resize * Fixed Red Black

我写了一个应用程序,但出于某种原因,它一直在100%的峰值。我在一些类上运行了一个profile r,一个报告显示isReset()和isRunning()似乎被调用了很多次。你有什么不对劲吗?请告诉我。谢谢

类1是唯一使用isReset()代码的类,所以我希望这有助于检测错误

一级

package SKA;
/*
 * ver 0.32 June 2009
 * 
 * Bug Fix Release:
 * 
 * Fixed Array resize
 * Fixed Red Black Tree delete method 
 * Fixed Red Black Tree save/read option
 * Update help file
 * 
 */





/*
 * Additions:
 * ver 0.30 May 2009
 * 
 * Added Red Black Tree structure
 * Added Delete method for canvases
 * Added Array structure
 * Added ability to recolor nodes.
 * Added Bubble Sort Algorithm
 * Added Insertion Sort Algorithm
 * Added Shell Sort Algorithm
 * Added Selection Sort Algorithm
 * Added Quick Sort Algorithm
 * Added Red Black Tree Search Algorithm
 * Added Black Height Check Algorithm
 * Bug fix in canvas - could not delete canvas properly
 */

// Additions: 
/* ver 0.25 August 2004
 *  Added recursion in SkaExecutionPanel by adding SkaFunction 
 *      and using desktop internal panes.
 *
 *  Added binary tree node annotation - text and drawn
 *  Added subtree highlight feature to VizBinaryTreeNode using SkaRectangle
 *  Improved node highlighting and selection scheme in VizBinaryTrees/VizDS
 *  Added Binary tree save and read methods
 *  Added visual subtree deletion (has bug)
 *
 *  Added ability to set breaks from within algorithm
 *  Added tooltip messages to SkaProgram/SkaFunction to show variable values
 *  Added simple value input and output methods to SkaProgram/SkaFunction 
 *  Added SkaTriangle.
 *  Added Font Adjustment and Color scheme options to show on overhead projectors
 *  
 *  Found bug in SkaGraph deleteVertex (with edges)
 */

/* ver 0.16 October 15, 2001
  Added Graph save and read methods.
  Save is an instance method, while read is a class method.

  Added circular layout for graphs, 
  Added fit/adjust graph layout to plate size method.

  Added label editing for Binary Trees and Graphs. 
  SkaLabels (glyphs) now truncate the string displayed to the width specified 
  in the constructor.

*/

/* ver 0.15 July 21, 2001
   Fixed Reset function in Execution using exceptions so that Ska Algorithms 
   can be run repeatedly without quitting the entire Ska System.
   This also allows trying the same program on different data structures.

   Problems with reset so far:
   1. Reset message to user can appear much later.
      I think this is an I/O sequencing problem and it should go away if 
      a message status GUI area is used.

   2. Bound variable names remain afterwards, 
      e.g. Graph bound to G will still show name as G after
      algorithm is interrupted.      

   Fixed problem with multiple input requests in 0.14 - by adding another
      wait call which waits on before asking for input.

   Also introduced trial orderly layout of canvas and program windows ,
   which fixes problem in 0.14  
*/

 /* ver 0.14 July 18, 2001

   Added subclasses of SkaProgram, so that multiple programs
   can run simultaneously. 
   Problem - when multiple programs start, their windows overlay each other
   Problem - Send DS to algorithm can get confused, if an algorithm 
      requests input while another is waiting on input or if 
      two algorithms request input at the same time
*/

/* ver 0.13   

   Added BinaryTree - does not have node value display yet.
   Added arrows on edges of directed graphs
*/   

/* ver 0.12

      Added VizElementListener - separated from VizElement
      Element Input menu item only highlights when input for that DS is requested
      DS Input has been cleaned up
*/

/* ver 0.11

    can ask user to select individual elements, e.g. vertices
    removed standard java cloning code which wasn't being used anyway
*/


import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.KeyStroke;
import javax.swing.border.BevelBorder;
import javax.swing.border.SoftBevelBorder;


// TimerQueue

public class SkaTest {
   public static final int WIDTH = 500;
   public static final int HEIGHT = 500;
   public static final int CANVAS_X = 100;
   public static final int CANVAS_Y = 100;
   public static final int CANVAS_FRAME_WIDTH = WIDTH+100;
   public static final int CANVAS_FRAME_HEIGHT = HEIGHT + 100;
   public static final int EXEC_WIDTH = 550;
   public static final int EXEC_HEIGHT = 400;

   static VizDSList dsList = new VizDSList();
   static SkaCanvas canvas = new SkaCanvas(dsList);
   static JFrame canvasFrame = new JFrame("Data Structure Canvas");
   static JMenuBar menuBar = new JMenuBar();
   static JMenu algorithmMenu = new JMenu("Algorithm");
   static JMenu dsMenu = new JMenu("Create");
   static JMenu helpMenu = new JMenu ("Help");
   static JLabel status = new JLabel(" ");   

   static SkaProgram[] alg;
   static JFrame execFrame[];
   static SkaExecutionPanel execPanel[];


   public static void setupFrames(int nAlgs) {
      int i; 

      for (i=0; i < nAlgs; i++) {
         // execFrame[i] = new JFrame("Execution Control Panel "+(i+1));
         execFrame[i] = new JFrame();
         execPanel[i] = new SkaExecutionPanel(execFrame[i]);
      }

      canvas.setMinimumSize(new Dimension(WIDTH, HEIGHT));
      canvasFrame.setSize(CANVAS_FRAME_WIDTH, CANVAS_FRAME_WIDTH);
      canvasFrame.getContentPane().setLayout(new BorderLayout(10,7));
      // canvasFrame.getContentPane().setPreferredSize(new Dimension(WIDTH, HEIGHT));
      canvasFrame.addWindowListener(new WindowAdapter() {
         public void windowClosing(WindowEvent e) {
            System.exit(0);
         }
      });
      // canvas.setMinimumSize(new Dimension(WIDTH, HEIGHT));

      for (i=0; i < nAlgs; i++) {
         execFrame[i].setSize(EXEC_WIDTH, EXEC_HEIGHT);
         // execFrame[i].getContentPane().setLayout(new BorderLayout(10,7));
         execFrame[i].addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
               System.exit(0);
            }
         });
         execPanel[i].setBorder(new SoftBevelBorder(BevelBorder.RAISED));
         // execFrame[i].setContentPane(execPanel[i]);
         execFrame[i].getContentPane().add("Center", execPanel[i]);
         // execFrame[i].setLocation(CANVAS_X +CANVAS_FRAME_WIDTH, CANVAS_Y + i*EXEC_HEIGHT);
         execFrame[i].setLocation(CANVAS_X +CANVAS_FRAME_WIDTH + i*30, CANVAS_Y + i*50);
      }

      canvas.setBorder(new SoftBevelBorder(BevelBorder.RAISED));
      canvasFrame.getContentPane().add("Center", new JScrollPane(canvas) );
      // canvasFrame.getContentPane().add("Center", new JScrollPane(canvas, ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS) );
      canvasFrame.getContentPane().add("South", status);
      canvasFrame.setLocation(CANVAS_X, CANVAS_Y);

      JMenu fileMenu = new JMenu("File");
      JMenuItem quitItem = new JMenuItem("Quit");
      //TODO Add quit listener
      quitItem.addActionListener(new ActionListener ()
      {


        public void actionPerformed(ActionEvent arg0) {
            //System.exit(0);

            int again = JOptionPane.showConfirmDialog(null, "Are you sure you want to exit system", "Exiting", JOptionPane.YES_NO_OPTION);
            if (again == JOptionPane.YES_OPTION)
            {
                System.exit(0);
            }


        }

      }
      );
      fileMenu.add(quitItem);
      menuBar.add(fileMenu);
      menuBar.add(algorithmMenu);
     // menuBar.add(dsMenu);
      menuBar.add(helpMenu);
      JMenuItem help = new JMenuItem ("Help Contents");
      //help.setMnemonic(KeyEvent.VK_H);
      //TODO Fix this method
      help.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F1, ActionEvent.CTRL_MASK));
      help.addActionListener(new ActionListener()
      {
/*
        @Override
        public void actionPerformed(ActionEvent arg0) {
            JOptionPane.showMessageDialog(null, "Alot of the functionality have not yet been included in this version\nCurrently working on the automation features now!", "SKA 0.2 Beta", JOptionPane.WARNING_MESSAGE);

        }
*/

        public void actionPerformed(ActionEvent arg0) {
            try {
                Runtime.getRuntime().exec("hh.exe C:/ska.chm");
            } catch (IOException e) {
                e.printStackTrace();
                JOptionPane.showMessageDialog(null, "File not found", "Error", JOptionPane.ERROR_MESSAGE);
            }


        }

      });
      JMenuItem about = new JMenuItem ("About SKA");
      about.addActionListener(new ActionListener(){


        public void actionPerformed(ActionEvent arg0) {
        JOptionPane.showMessageDialog(null, "SKA Version 0.1 Beta");

        }
    });
      helpMenu.add(help);
      helpMenu.add(about);
      canvasFrame.setJMenuBar(menuBar);
   }

   /** The create menu item  */
   public static void createProgram(int i) {
      JMenuItem algItem;
      switch (i) {
      case 0 :
          alg[0] = new RedBlackValidate(canvas, execPanel[0]);
          execFrame[0].setTitle("Validate Algorithm");
          System.out.println("Validate Algorithm");
          algItem = new JMenuItem("Validate Algorithm");
          algorithmMenu.add(algItem);
          break;
   /*   case 0 :
         alg[0] = new BreadthFirstSearch(canvas, execPanel[0]);
         execFrame[0].setTitle("BFS Graph Algorithm");
         // System.out.println("BreadthFirstSearch");
         algItem = new JMenuItem("BFS Graph Algorithm");
         algorithmMenu.add(algItem);
         break;
      case 1:
         alg[1] = new LevelOrderAlgorithm(canvas, execPanel[1]);
         execFrame[1].setTitle("Level Order Tree Algorithm");
         System.out.println("LevelOrderAlgorithm");
         algItem = new JMenuItem("Level Order Tree Algorithm");
         algorithmMenu.add(algItem);
         break;         
      case 2:
         alg[2] = new BinarySearchTreeAlgRecursive(canvas, execPanel[2]);
         execFrame[2].setTitle("BinaryTreeSearchRec Algorithm");
         System.out.println("BinaryTreeSearchRec Algorithm");
         algItem = new JMenuItem("BinaryTreeSearchRec Algorithm");
         algorithmMenu.add(algItem);
         break;         
      case 3:
         alg[3] = new BinarySearchTreeAlgIterative(canvas, execPanel[3]);
         execFrame[3].setTitle("BinaryTreeSearchIter Algorithm");
         System.out.println("BinaryTreeSearchIter Algorithm");
         algItem = new JMenuItem("BinaryTreeSearchIter Algorithm");
         algorithmMenu.add(algItem);
         break;         
      case 4:
          alg[4] = new RebBlackTreeSearch (canvas, execPanel[4]);
          execFrame[4].setTitle("Red Black Search Algorithm");
          System.out.println("Red Black Search Algorithm");
          algItem = new JMenuItem("Red Black Search Algoithm Algorithm");
          algorithmMenu.add(algItem);
          break;
      case 5:
          alg[5] = new ArrayInsertionSortAlg (canvas, execPanel[5]);
          execFrame[5].setTitle("Array Insertion Sort Algorithm");
          System.out.println("Array Insertion Sort");
          algItem = new JMenuItem("Array Insertion Sort Algorithm");
          algorithmMenu.add(algItem);
          break;
      case 6:
          alg[6] = new ArraySelectionSortAlg (canvas, execPanel[6]);
          execFrame[6].setTitle("Array Selection Sort Algorithm");
          System.out.println("Array SelectionSearch");
          algItem = new JMenuItem("Array Selection Sort Algorithm");
          algorithmMenu.add(algItem);
          break; */
      default:
         break;         
      }
   }


   public static void main(String args[]) {
      int i, nAlgs = 1; //nAlgs = 7;

      alg = new SkaProgram[nAlgs];
      execPanel = new SkaExecutionPanel[nAlgs];
      execFrame = new JFrame[nAlgs];

      // canvas.setDebugGraphicsOptions(DebugGraphics.BUFFERED_OPTION);
      setupFrames(nAlgs);
      canvasFrame.setVisible(true);


      for (i=0; i < alg.length; i++) {
         createProgram(i);
         execFrame[i].setVisible(true);
         alg[i].start();
         alg[i].displayAlgorithm();
      }

      while (true) {
         for (i=0; i < alg.length; i++) 
            if (execPanel[i].isReset()) {
               alg[i].terminate();
               createProgram(i);
               alg[i].start();
               execPanel[i].unreset();
            }         
      }
   }
}  // End class SkaTest
SKA包;
/*
*2009年6月0日第32版
* 
*错误修复版本:
* 
*固定数组大小
*固定红黑树删除方法
*修复了红黑树保存/读取选项
*更新帮助文件
* 
*/
/*
*补充:
*2009年5月30日第0版
* 
*添加红黑树结构
*增加了画布的删除方法
*添加的数组结构
*增加了重新收集节点的功能。
*添加气泡排序算法
*添加插入排序算法
*添加Shell排序算法
*添加选择排序算法
*增加了快速排序算法
*添加红黑树搜索算法
*增加了黑色高度检查算法
*画布中的错误修复-无法正确删除画布
*/
//补充:
/*2004年8月0日至25日
*通过添加SkaFunction在SkaExecutionPanel中添加了递归
*和使用桌面内部窗格。
*
*添加了二叉树节点注释-文本和绘制
*使用SkaRectangle向VizBinaryTreeNode添加了子树高亮显示功能
*VizBinaryTrees/VizDS中改进的节点高亮显示和选择方案
*添加了二叉树保存和读取方法
*添加了可视子树删除(有bug)
*
*增加了从算法内部设置中断的功能
*将工具提示消息添加到SkaProgram/SkaFunction以显示变量值
*为SkaProgram/SkaFunction添加了简单的值输入和输出方法
*添加了SkaTriangle。
*增加了字体调整和配色方案选项,可在投影仪上显示
*  
*在SkaGraph deleteVertex(带边)中发现错误
*/
/*2001年10月15日0.16版
添加了图形保存和读取方法。
Save是实例方法,read是类方法。
增加了图形的圆形布局,
将拟合/调整图形布局添加到板材尺寸方法。
添加了二叉树和图形的标签编辑。
SkaLabels(glyphs)现在将显示的字符串截断为指定的宽度
在构造函数中。
*/
/*2001年7月21日0.15版
修复了执行中使用异常的重置函数,使Ska算法
可重复运行,无需退出整个Ska系统。
这也允许在不同的数据结构上尝试相同的程序。
到目前为止重置的问题:
1.给用户的重置消息可能会在很久以后出现。
我认为这是一个I/O排序问题,如果
使用消息状态GUI区域。
2.绑定变量名保留在后面,
e、 g.绑定到g的图形在之后仍将显示名称为g
算法被中断。
修复了0.14中多个输入请求的问题-通过添加另一个
在请求输入之前等待的等待呼叫。
还介绍了画布和程序窗口的有序布局,
它修复了0.14中的问题
*/
/*2001年7月18日0.14版
添加了SkaProgram的子类,以便多个程序
可以同时运行。
问题-当多个程序启动时,它们的窗口相互重叠
问题-发送DS到算法可能会混淆,如果算法
当另一个正在等待输入时请求输入,或者
两种算法同时请求输入
*/
/*0.13版
添加的BinaryTree-尚未显示节点值。
在有向图的边上添加箭头
*/   
/*0.12版
添加了VizElementListener-与VizElement分离
元素输入菜单项仅在请求输入该DS时突出显示
DS输入已被清除
*/
/*0.11版
可以要求用户选择单个元素,例如顶点
删除了标准java克隆代码,但该代码并未被使用
*/
导入java.awt.BorderLayout;
导入java.awt.Dimension;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.awt.event.KeyEvent;
导入java.awt.event.WindowAdapter;
导入java.awt.event.WindowEvent;
导入java.io.IOException;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JMenu;
导入javax.swing.JMenuBar;
导入javax.swing.JMenuItem;
导入javax.swing.JOptionPane;
导入javax.swing.JScrollPane;
导入javax.swing.KeyStroke;
导入javax.swing.border.BevelBorder;
导入javax.swing.border.SoftBevelOrder;
//计时器队列
公共级滑冰运动员{
公共静态最终整数宽度=500;
公共静态最终内部高度=500;
公共静态最终整数X=100;
公共静态最终整型画布_Y=100;
公共静态最终整型画布\框架\宽度=宽度+100;
公共静态最终整型画布\框架\高度=高度+100;
公共静态最终int EXEC_宽度=550;
公共静态最终内部执行高度=400;
静态VizDSList dsList=新VizDSList();
静态SkaCanvas画布=新SkaCanvas(dsList);
静态JFrame canvasFrame=新JFrame(“数据结构画布”);
静态JMenuBar menuBar=新JMenuBar();
静态JMenu算法菜单=新JMenu(“算法”);
静态JMenu dsMenu=新JMenu(“创建”);
静态JMenu帮助菜单=新JMenu(“帮助”);
静态JLabel状态=新JLabel(“”);
静态SKA程序[]alg;
静态JFrame execFrame[];
静态SkaExecutionPanel execPanel[];
公共静态无效设置帧(int-nAlgs){
int i;
对于(i=0;ipackage SKA;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.Stack;

import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JComboBox;
import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JToolBar;

@SuppressWarnings("serial")
public

class SkaExecutionPanel extends JDesktopPane {

   public static final int EXEC_WIDTH = SkaTest.EXEC_WIDTH-100;
   public static final int EXEC_HEIGHT = SkaTest.EXEC_HEIGHT-50;

   boolean run = false, pause = true, step = false, reset = false;
   JToolBar toolbar = new JToolBar();
   JTextArea textOutputArea = new JTextArea();

   SkaProgram prog;
   Stack<SkaFunction> functionStack = new Stack<SkaFunction>();

   SkaFunction currentFunction = null;

   int level = 0, in = 30;

   public void doCall(String[] subAlg, String subAlgName) {
      doCall(subAlg, subAlgName, false);   // make non-icon default
   }

   public void doCall(String[] subAlg, String subAlgName, boolean iconify) {      
      if (currentFunction != null)
         functionStack.push(currentFunction);
      currentFunction = new SkaFunction(this, subAlg, subAlgName, iconify);
      add(currentFunction, new Integer(1));
      currentFunction.setBounds(level*in,level*in,EXEC_WIDTH, EXEC_HEIGHT);
      // currentFunction.setBounds(level*in,level*in,EXEC_WIDTH-(level+1)*in, EXEC_HEIGHT-(level+1)*in);
      currentFunction.setVisible(true);
      level++;    
   }


   public void doReturn() {
      if (currentFunction == null)
         return;
      if (currentFunction.makeIconWhenDone()) {
         getDesktopManager().iconifyFrame(currentFunction);        
         // currentFunction.setIcon(true);
         currentFunction.setIconifiable(true);
      }
      else
         currentFunction.setVisible(false);
      currentFunction = (SkaFunction) functionStack.pop();        
      level--;
   }


   public void displayAlgorithm(String[] a) {
      doCall(a, "main");
   }

   public void displayAlgorithm(String[] a, String aname) {
      doCall(a, aname);
   }

   public void setControlsEnabled(boolean b) {
      toolbar.setEnabled(b);
   }


   class RunAction extends AbstractAction {
      RunAction() {
         super("run");
      }

      public void actionPerformed(ActionEvent e) {
         run = true; pause = false; step = false;      
      }
   }


   class StepAction extends AbstractAction {
      StepAction() {
         super("step");
      }

      public void actionPerformed(ActionEvent e) {
         run = false; pause = false; step = true;      
      }
   }


   class PauseAction extends AbstractAction {
      PauseAction() {
         super("pause");
      }

      public void actionPerformed(ActionEvent e) {
         pause = true; 
         //         System.out.print("breaks");
         //         for (int i=0; i<breaks.length; i++)
         //            System.out.print("[" +i+ "]=" + breaks[i].toString() + "  ");
         //         System.out.println("");   

      }
   }


   class ResetAction extends AbstractAction {
      ResetAction() {
         super("reset");
         putValue(Action.SHORT_DESCRIPTION, "stop program and reset state to begining");
      }

      public void actionPerformed(ActionEvent e) {
         run = false; pause = true; step = false;      
         // should also restart SkaProgram
         reset = true;

         if (currentFunction != null) currentFunction.reset();
         /*
         JInternalFrame[] frames = getAllFrames();
         for (int i = 0; i < frames.length; i++) {
         // frames[i].dispose();
         if (frames[i].isIcon())
         frames[i].dispose();
         } 
         */
      }
   }


   JComboBox speedControl;
   String speedNames[] =  { "slow", "normal", "fast", "very fast" };
   int speeds[] =  {4000, 2000, 1000, 500} ; // milliseconds
   int speed = speeds[1];
   private void initSpeedMenu() {
      speedControl = new JComboBox(speedNames);
      // speedControl.setMaximumRowCount(3);
      speedControl.addItemListener(
         new ItemListener() {
         public void itemStateChanged( ItemEvent e) {
            speed = speeds[speedControl.getSelectedIndex()];
         }
      }
      );
      speedControl.setSelectedIndex(1);
      speedControl.setMaximumSize(speedControl.getPreferredSize());
      speedControl.setToolTipText("execution speed");
   }


   SkaExecutionPanel(JFrame frame) {
      initSpeedMenu();
      toolbar.add(new RunAction());
      toolbar.add(new StepAction());
      toolbar.add(new ResetAction());
      toolbar.add(new PauseAction());
      toolbar.addSeparator();
      toolbar.add(speedControl);

      // frame.getContentPane().setLayout(new BorderLayout(10,7));

      // makeTable();

      frame.getContentPane().add("North", toolbar);  

      Font f = new Font("SansSerif", Font.BOLD, 14);
      textOutputArea.setFont(f);

      frame.getContentPane().add("South", new JScrollPane(textOutputArea));
      // frame.getContentPane().add(this, BorderLayout.CENTER)
      // frame.getContentPane().add("Center", toolbar, BorderLayout.NORTH);  
      // setSize(300,250);    

      // add toolbar, table, set layout, sizes         
   }


   //   public void setAlgorithm(SkaProgram p)  {
   //      prog = p;
   //      sendAlgorithm(p.getPseudocode());
   //   }


   public int getSpeed() { return speed; 
   }

   public boolean isRunning() { return run; 
   }
   public boolean isPaused() { return pause; 
   }
   public boolean isStepping() { return step; 
   }
   public boolean isReset() { return reset; 
   }

   public void pause() { pause = true; 
   }
   public void unreset() { reset = false; 
   }

   public void aboutToWait() {
      currentFunction.aboutToWait();
   }

   public void doneWait() {
      currentFunction.doneWait();
   }

   public void showToolTipValue(String s)  {
      currentFunction.showToolTipValue(s);
   }

   public void showAlgLineBreak(int i) {
      currentFunction.showAlgLineBreak(i);
   }      

   public void showAlgLine(int i) {
      currentFunction.showAlgLine(i);
   }      


   public void displayText(String s) {
      textOutputArea.append(s);  // +"\n"   add newline?
   }

} // End class SkaExecutionPanel
dotProduct(vector a, vector b)
{
  //create vector dot product here
  maths maths maths
}

calc(data)
{
  for obj in data:
    dotproduct(obj, foo)
}
@SuppressWarnings("serial")