小编chr*_*ixm的帖子

与Java 7相比,Java 8 ScriptEngine的主要性能问题

我有一个Java程序(使用JDK 7u80编译),它广泛使用"JavaScript"ScriptEngine(JSR-223).我注意到,与Java 7运行时环境(JRE 7u80)相比,在Java 8运行时环境(JRE 8u65)下执行时,我的程序运行速度极慢.

我已经整理了以下SSCCE来演示问题,然后在同一台Windows PC上的Java 7和Java 8下执行它:

import javax.script.*;

public class SSCCE {
  public SSCCE() {
    ScriptEngineManager sem = new ScriptEngineManager();
    ScriptEngine js = sem.getEngineByName("JavaScript");
    long t = 0;
    int i = 0;

    String gJs = "function ip2long(ip) {";
    gJs += "var aIP = ip.split(\".\");";
    gJs += "return (aIP[0] * Math.pow(256, 3)) + (aIP[1] * Math.pow(256, 2)) + (aIP[2] * 256) + (aIP[3] * 1);";
    gJs += "}";
    gJs += "function long2ip(l) {";
    gJs += "if (!isNaN(l) …
Run Code Online (Sandbox Code Playgroud)

java performance scriptengine java-8

16
推荐指数
1
解决办法
4488
查看次数

JavaScript对象 - 根据上下文的不同类型

我将首先说我不认为这是可能的,但希望有人知道JavaScript中的一些特殊方法来做到这一点.我有一个JavaScript对象定义如下:

var t = {
  "fields": {
    "a": ["99", "98"]
  }
};
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种方法,以便我可以使用不同的值定义数组的相同元素两次,可以在两个不同的上下文中使用 - 类似这样:

var t = {
  "fields": {
    "a": ["99", "98"],
    "a": "99|98"
  }
};
Run Code Online (Sandbox Code Playgroud)

如果我使用语法查询它将t.fields["a"]返回"99 | 98",但如果我使用t.fields["a"][0]它来查询它,那么它将返回"99".我理解如果我在没有指定索引的情况下查询数组,那么它会返回"99,98"作为字符串 - 但我需要它返回用"|"分隔的条目 代替 ",".

javascript

5
推荐指数
1
解决办法
104
查看次数

Java的setFocusableWindowState和setAccelerator不能很好地播放

在Windows 7下,我有一个以窗口状态启动的Java程序,JFrame.ICONIFIED我要求它在加载时不会窃取焦点.

我通过设置setFocusableWindowStatefalse调用之前完成此操作setVisible,然后将其恢复到true之后.这工作正常,我的程序在后台有效加载.

但是,我注意到我的键盘加速器都不再工作,这是使用的直接结果setFocusableWindowState.我甚至尝试在窗口可见后设置我的键盘加速器,但没有运气.下面SSCCE说明了问题-用户不能按Ctrl + T,如果我打电话setFocusableWindowState.

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class SSCCE extends JFrame implements ActionListener {
  private JMenuBar mBar;
  private JMenu mFile;
  private JMenuItem miTest;

  public SSCCE() {
    setSize(300, 200);

    mBar = new JMenuBar();
    mFile = new JMenu("File");
    miTest = new JMenuItem("Test");
    miTest.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_T, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
    miTest.addActionListener(this);
    mFile.add(miTest);
    mBar.add(mFile);

    setJMenuBar(mBar);

    setDefaultCloseOperation(DISPOSE_ON_CLOSE);
    setExtendedState(getExtendedState() | JFrame.ICONIFIED);
    setFocusableWindowState(false);
    setVisible(true);
    setFocusableWindowState(true);
  }

  @Override
  public void actionPerformed(ActionEvent e) { …
Run Code Online (Sandbox Code Playgroud)

java swing focus acceleratorkey

3
推荐指数
1
解决办法
198
查看次数

将JTextArea复制为"text/html"DataFlavor

我有一个JTextArea,我正在使用一个Highlighter语法突出显示我的一些文本根据我的SSCCE如下:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.text.*;

public class SSCCE extends JFrame {
  public SSCCE() {
    final JTextArea aMain = new JTextArea();
    aMain.setFont(new Font("Consolas", Font.PLAIN, 11));
    aMain.setMargin(new Insets(5, 5, 5, 5));
    aMain.setEditable(false);
    add(aMain);

    aMain.setText("The quick brown fox jumped over the lazy dog.");
    Highlighter h = aMain.getHighlighter();
    try {
      h.addHighlight(10, 15, new DefaultHighlighter.DefaultHighlightPainter(new Color(0xFFC800)));
    }
    catch (BadLocationException e) { 
      e.printStackTrace(); 
    }

    aMain.getActionMap().put("Copy", new AbstractAction() {
      public void actionPerformed(ActionEvent e) {
        aMain.copy();
      }
    });
    aMain.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_C, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()), …
Run Code Online (Sandbox Code Playgroud)

html java clipboard swing jtextarea

2
推荐指数
1
解决办法
1396
查看次数

作用于自身以使用另一个对象扩展自身的 JavaScript 函数

我确信我正在尝试做的事情有一个名称,并且我确信以前有人问过这个问题,但我正在努力寻找现有的答案 - 可能是因为我没有在寻找正确的术语。我有一个 JavaScript 函数被调用extend(),它类似于Object.assign()将对象合并在一起 -Object.assign在我当前的实现中我无权访问。

function extend(target) {
  for (var i = 1; i < arguments.length; ++i) {
    if (typeof arguments[i] !== 'object') {
      continue;
    }
    for (var j in arguments[i]) {
      if (arguments[i].hasOwnProperty(j)) {
        if (typeof arguments[i][j] === 'object') {
          target[j] = extend({}, target[j], arguments[i][j]);
        }
        else if (!target.hasOwnProperty(j)) {
          target[j] = arguments[i][j];
        }
      }
    }
  }
  return target;
}
Run Code Online (Sandbox Code Playgroud)

如果我调用它 using extend(target, defaults)which 将合并defaultsinto的内容target而不覆盖任何现有的键,这很好用target(除非它们是对象,然后它们被合并)。 …

javascript

0
推荐指数
1
解决办法
63
查看次数