我有一个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) 我将首先说我不认为这是可能的,但希望有人知道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"作为字符串 - 但我需要它返回用"|"分隔的条目 代替 ",".
在Windows 7下,我有一个以窗口状态启动的Java程序,JFrame.ICONIFIED
我要求它在加载时不会窃取焦点.
我通过设置setFocusableWindowState
到false
调用之前完成此操作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) 我有一个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) 我确信我正在尝试做的事情有一个名称,并且我确信以前有人问过这个问题,但我正在努力寻找现有的答案 - 可能是因为我没有在寻找正确的术语。我有一个 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 将合并defaults
into的内容target
而不覆盖任何现有的键,这很好用target
(除非它们是对象,然后它们被合并)。 …
java ×3
javascript ×2
swing ×2
clipboard ×1
focus ×1
html ×1
java-8 ×1
jtextarea ×1
performance ×1
scriptengine ×1