小编E.S*_*.S.的帖子

Visual Studio 2015 - Javascript ES6无法正常工作

我正在玩VS 2015 JavaScript/NodeJS IDE,我打算使用ES6作为JavaScript的语言风格,但是我注意到Visual Studio没有识别ES6(尽管我在各种网站上看到VS应该识别ES6 ).

有谁知道如何让VS 2015与ES6一起玩得很好(在语法高亮,智能感知等方面)?

ES6-错误

我还修改了文件扩展名为.JSX和.ES6,以防有关VS接收它.没运气...

javascript visual-studio node.js ecmascript-6 visual-studio-2015

13
推荐指数
1
解决办法
7108
查看次数

电子学中语境菜单的堆积

我正在构建一个基于电子的应用程序,其中包含一个包含唯一行的网格.我想要一个特定于每一行的上下文菜单.这是一个例子:

GUI的图像与上下文菜单

尽管裁剪了此屏幕截图,但您可以看到有多行,每行包含单独的数据.由于我想右键单击一行并获得一个独特的上下文菜单,我已经实现了电子上下文菜单,它可以在第一次右键单击时工作,但随后的右键单击会导致上下文菜单的堆叠效果.

具体来说,这是发生的事情:

  1. 我右键单击Row-1并显示正确的上下文菜单
  2. 我右键单击Row-2并重复显示Row-1的上下文菜单,然后显示Row-2的上下文菜单.(注意在屏幕截图中显示的上下文菜单与我的鼠标结束的行不对应)
  3. 这重复了.

在React.JS中,这是我的监听器,它contextmenu根据electron-context-menu模块的需要收集对象:

  handleContextMenu() {
    this.props.contextMenu({
      window: electron.remote.BrowserWindow.getFocusedWindow(),
      prepend: (params, browserWindow) => [{
        label: `Library Compare ${this.state.msn}`,
        click: () => this.runLibCompare()
      }],
      append: (params, browserWindow) => [{
        label: '---',
      }]
    })
  };
Run Code Online (Sandbox Code Playgroud)

在哪里this.props.contextMenu(...)准备React.JS组件进入:

const contextMenu = eRequire('electron-context-menu');
Run Code Online (Sandbox Code Playgroud)

我做了一些大规模的调试,我不认为问题是模块.我使用的模块基本上组织了有关上下文菜单的信息,然后使用electron.remote函数和menu.popup来自电子内部的函数.这是github中特定行的链接.

const menu = (electron.Menu || electron.remote.Menu).buildFromTemplate(menuTpl);
menu.popup(electron.remote ? electron.remote.getCurrentWindow() : win);
Run Code Online (Sandbox Code Playgroud)

这个电话menu.popup导致了这一.

  const remoteMemberFunction = function (...args) {
    if (this …
Run Code Online (Sandbox Code Playgroud)

ipc menu node.js atom-editor electron

10
推荐指数
1
解决办法
1017
查看次数

清除HashSet与创建新HashSet的内存效率

好奇心和效率是这个问题的原因.我遇到的情况是,在某些循环运行后我创建了许多新的HashSet:

HashSet目前在类的顶部声明为:

private Set<String> failedTests;
Run Code Online (Sandbox Code Playgroud)

然后在代码中,我只是在重新运行测试时创建一个新的failedTests HashSet:

failedTests = new HashSet<String>(16384);
Run Code Online (Sandbox Code Playgroud)

我会一遍又一遍地这样做,具体取决于测试的大小.我希望垃圾收集器能够最有效地处理旧数据.但是,我知道另一种选择是在开始时最初创建HashSet:

private Set<String> failedTests = new HashSet<String>(16384);
Run Code Online (Sandbox Code Playgroud)

然后每次通过循环清除HashSet.

failedTests.clear();
Run Code Online (Sandbox Code Playgroud)

我的问题是在开销等方面最有效的方法是什么?我不知道clear()函数在里面做了什么 - 它是做同样的事情,将旧数据发送到垃圾收集器,还是它做了更有效的事情?另外,我给HashSet一个很大的初始容量缓冲区,但是如果一个测试需要超过2 ^ 14个元素,那么该.clear()函数会将HashSet重新实例化为16384吗?

要添加,我在这里找到了clear()源代码.所以它至少是最坏情况的O(n)运算.

使用clear函数,我做了一个测试过程,在565秒内完成.使用GC处理它,测试在506秒内完成.

但它不是一个完美的基准,因为还有其他外部因素,如与计算机和网络的文件系统连接.但是整整一分钟确实感觉非常好.有没有人推荐一个适用于线/方法级别的特定分析系统?(我正在使用Eclipse Indigo)

java collections garbage-collection

9
推荐指数
2
解决办法
1460
查看次数

编译时IntelliJ无法在同一个包中找到类

作为我之前问题的扩展(IntelliJ 在编译时找不到依赖关系,但可以在编辑器中找到。)已经解决了,我现在有一个新问题出现了。

在同一个包中,对其他类的引用显示错误:

在此处输入图片说明

正如您在图片中看到的那样BifCreatorController,即使该类与BifCreatorView.

就像我之前的问题一样,我不明白为什么 IntellJ 会吐出这些错误。这个项目在 Eclipse 中运行良好,但我希望开始远离 Eclipse。

java eclipse dependencies compiler-errors intellij-idea

8
推荐指数
4
解决办法
1万
查看次数

IntelliJ - 所选目录不是JDK的主页

类似于这个问题IntelliJ,"所选目录不是JDK的主页",我收到一个错误,我的JDK目录突然无效.

Intellij JDK错误

即使我的JDK目录看起来很好,上次我加载了IntelliJ

我的JDK目录

所以我选择了一个有效的JDK目录但仍然出现了这个错误.

我的IntelliJ版本

什么可能导致这个?什么能解决这个问题?

java ide intellij-idea java-7 intellij-15

8
推荐指数
1
解决办法
8028
查看次数

退出应用程序优雅?

我有一个具有良好定义的Try/Catch/Finally链的应用程序,它在正常条件下退出并执行finally块,但是当有人过早地点击GUI中的红色X时,程序完全存在(代码= 0)并且主线程的finally块未被调用.

事实上,我确实希望程序在点击red-X时退出,但我不想要的是跳过finally {}块!我在GUI中手动放入finally块的最重要部分,但我真的不希望这样做,因为我希望GUI与实际程序分离:

class GUI { // ...
...
mainFrame.addWindowListener(new WindowAdapter() {
  public void windowClosing(WindowEvent evt) {
    try {
      processObject.getIndicatorFileStream().close();
    } catch (Exception ignore) {}
    System.exit(0);
  }
});
...
}
Run Code Online (Sandbox Code Playgroud)

但我更喜欢这样的电话:

mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Run Code Online (Sandbox Code Playgroud)

并确保在Exit之后从每个线程调用所有finally {}块.

我知道这实际上是预期的.如果应用程序从一个单独的线程(比如GUI线程)关闭,那么主线程将停在其轨道上.

简而言之 - 我如何确保System.exit(0)或JFrame.EXIT_ON_CLOSE仍然会导致每个线程的finally块执行?

java user-interface exit jframe try-catch-finally

7
推荐指数
1
解决办法
7998
查看次数

Apache HTTP BasicScheme.authenticate已弃用?

在Apache HTTP Component 4类org.apache.http.impl.auth.BasicScheme中,我注意到了该方法:

public static Header authenticate(
            final Credentials credentials,
            final String charset,
            final boolean proxy)
Run Code Online (Sandbox Code Playgroud)

不推荐使用以下信息:

/**
 * Returns a basic <tt>Authorization</tt> header value for the given
 * {@link Credentials} and charset.
 *
 * @param credentials The credentials to encode.
 * @param charset The charset to use for encoding the credentials
 *
 * @return a basic authorization header
 *
 * @deprecated (4.3) use {@link #authenticate(Credentials, HttpRequest, HttpContext)}.
 */
@Deprecated
Run Code Online (Sandbox Code Playgroud)

但是,我没有看到解释如何从deprated函数迁移到新函数的文档.虽然已弃用的功能有效,但我宁愿以"正确"的方式做事.以下是我使用不推荐使用的函数的方法:

UsernamePasswordCredentials creds = new UsernamePasswordCredentials("admin", "admin");
URI uriLogin …
Run Code Online (Sandbox Code Playgroud)

java apache post http apache-httpcomponents

7
推荐指数
2
解决办法
3927
查看次数

在sqlite3控制台中使用ASCII查看blob数据作为hexdump

我在SQLite表中有一列数据存储为blob.具体来说,它是一个序列化的POJO(java对象).

无论哪种方式,我想在SQLite控制台中将其视为十六进制转储,有点像这样:

0000000000  |The correction f|
0000000016  |or the aberratio|
0000000032  |n of light is sa|
0000000048  |id,.on high auth|
0000000064  |ority, not to be|
0000000080  | perfect even in|
0000000096  | that most perfe|
0000000112  |ct organ, the.ey|
0000000128  |e..|
Run Code Online (Sandbox Code Playgroud)

我知道该语句SELECT HEX(obj) FROM data WHERE rowid = 1会将数据视为十六进制,但现在我想把它管道化为能给我一个hexdump视图的东西.

PS - 我知道我试图查看的数据是二进制(序列化POJO),但我想看看里面的实验是什么.所以,即使最终结果是神秘的,请告诉我!

更新:我尝试了一些建议,但发现sqlite3没有输出完整的十六进制.我期待大约500字节,但改为10:

root@ubuntu:~# sqlite3 IceCream.db "select hex(obj) from Customers where rowid=1;" 
ACED00057372002D6564752E6761746563682E7365636C6173732E70726F6A656374322E637573746F6D65722E437573746F6D6572000000000000000102000B4C0007616464726573737400124C6A6176612F6C616E672F537472696E673B4C0012617661696C61626C65467265654974656D737400134C6A6176612F6C616E672F496E74656765723B4C00096269727468446174657400104C6A6176612F7574696C2F446174653B4C000C646973636F756E745261746571007E00024C000966697273744E616D6571007E00014C000A676F6C645374617475737400134C6A6176612F6C616E672F426F6F6C65616E3B4C00086C6173744E616D6571007E00014C000D6D6F6E74686C79506F696E747371007E00024C0013706F696E74734561726E656450657254696D657400134C6A6176612F7574696C2F486173684D61703B4C000B746F74616C506F696E747371007E00024C000876697053696E636571007E0003787200386564752E6761746563682E7365636C6173732E70726F6A656374322E73797374656D732E446174616261736553657269616C4F626A65637400000000000000010200024C000269647400104C6A6176612F6C616E672F4C6F6E673B4C00166C61737454696D654F626A6563744D6F64696669656471007E000778707372000E6A6176612E6C616E672E4C6F6E673B8BE490CC8F23DF0200014A000576616C7565787200106A6176612E6C616E672E4E756D62657286AC951D0B94E08B020000787000000000000000017371007E0009000001497757AAFB740006436172736F6E737200116A6176612E6C616E672E496E746567657212E2A0A4F781873802000149000576616C75657871007E000A000000007372000E6A6176612E7574696C2E44617465686A81014B59741903000078707708000001349BB816607871007E000F74000442696C6C737200116A6176612E6C616E672E426F6F6C65616ECD207280D59CFAEE0200015A000576616C7565787000740005313233205471007E000F737200116A6176612E7574696C2E486173684D61700507DAC1C31660D103000146000A6C6F6164466163746F7278703F400000770800000010000000007871007E000F70


root@ubuntu:~# sqlite3 IceCream.db "select obj from Customers where rowid=1;" | hexdump -C
00000000  ac ed …
Run Code Online (Sandbox Code Playgroud)

sqlite hex hexdump

7
推荐指数
4
解决办法
1万
查看次数

如何从文件的字节数组中获取文件名?

我有代表我通过网络传输的文件的字节。除了在文件系统上手动重建文件外,如何从文件中获取信息,例如 getName()、getPath() 等?

换句话说:

  1. 我从机器 A 上的文件开始
  2. 我使用 FileUtils 将文件转换为字节数组
  3. 我通过网络将该文件传输到机器 B
  4. 在机器 B 上,我想将该 byte[] 重构为一个 File 并运行诸如 getName() 之类的方法

以下不起作用

  1. (文件)字节 --> 不转换
  2. ((File) ((Object) bytes))) --> 也不转换

我真的不想在文件系统上创建一个新的临时文件,尽管我知道有静态 File.createTemp 可以做到这一点。我更愿意将它保存在内存中,从 byte[] 数组构造一个新的 File 对象,获取我需要的信息并完成。

实际上,更好的是一个 API,它将获取 byte[] 并从中通过解析位直接获取文件名。

java apache arrays file apache-commons

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

什么时候使用 ObjectInputStream.readUnshared() 和 .readObject() ?

Java ObjectInputStream中有两个类似的方法:

读取未共享()

读取对象()

文档指出:

public Object readUnshared() throws IOException, ClassNotFoundException

从 ObjectInputStream 读取“非共享”对象。此方法与 readObject 相同,只不过它阻止对 readObject 和 readUnshared 的后续调用返回对通过此调用获得的反序列化实例的其他引用。具体来说:

如果调用 readUnshared 来反序列化反向引用(之前已写入流的对象的流表示形式),则会抛出 ObjectStreamException。

如果 readUnshared 成功返回,则任何后续尝试反序列化对 readUnshared 反序列化的流句柄的反向引用都将导致抛出 ObjectStreamException。

通过 readUnshared 反序列化对象会使与返回的对象关联的流句柄无效。请注意,这本身并不总是保证 readUnshared 返回的引用是唯一的;反序列化对象可以定义一个 readResolve 方法,该方法返回对其他方可见的对象,或者 readUnshared 可以返回可在流中的其他位置或通过外部方式获取的 Class 对象或枚举常量。如果反序列化对象定义了 readResolve 方法并且调用该方法返回一个数组,则 readUnshared 返回该数组的浅表克隆;这保证了返回的数组对象是唯一的,并且无法通过对 ObjectInputStream 调用 readObject 或 readUnshared 再次获取,即使底层数据流已被操作。

重写此方法的 ObjectInputStream 子类只能在拥有“enableSubclassImplementation”SerializedPermission 的安全上下文中构造;任何在没有此权限的情况下实例化此类子类的尝试都将导致抛出 SecurityException。

但我想知道是否有人在现实生活中对此有.readUnshared()用途.readObject()

java oracle objectoutputstream objectinputstream java-7

6
推荐指数
1
解决办法
4668
查看次数