小编chu*_*acw的帖子

同步块中的意外代码

以下Java代码生成以下JVM字节码.

我很好奇为什么生成从偏移31到偏移36的代码.JLS7或JVM7规范中没有任何内容涉及此问题.我错过了什么吗?

即使我删除了println语句,代码(偏移31到偏移36)仍然只在较早的位置生成,因为println调用已被删除.

// Java code
    void testMonitor() {
        Boolean x = new Boolean(false);
        synchronized(x) {
            System.out.println("inside synchronized");
            System.out.println("blah");
        };
        System.out.println("done");
    }


// JVM bytecode
    Offset  Instruction       Comments (Method: testMonitor)
    0       new 42            (java.lang.Boolean)
    3       dup
    4       iconst_0
    5       invokespecial 44  (java.lang.Boolean.<init>)
    8       astore_1          (java.lang.Boolean x)
    9       aload_1           (java.lang.Boolean x)
    10      dup
    11      astore_2
    12      monitorenter
    13      getstatic 15      (java.lang.System.out)
    16      ldc 47            (inside synchronized)
    18      invokevirtual 23  (java.io.PrintStream.println)
    21      getstatic 15      (java.lang.System.out)
    24      ldc 49            (blah)
    26      invokevirtual 23 …
Run Code Online (Sandbox Code Playgroud)

java jvm jls

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

检测文件是否在Windows中打开的程序化方法是什么?

是否有一种简单的方法可以检测Windows中的任何进程中是否打开了文件?

例如,我正在监视目录,如果文件放在目录中,我想对这些文件执行一些操作.

如果文件仍然被复制到目录中,或者这些文件的内容仍在更新中,我不想执行这些操作.

所以,正在发生的是,给定一个文件名,我想实现一个函数,如函数IsFileOpenedAnywhereElseInAnyProcess(const PathName: string): Boolean,返回truefalse.

我能想到的一种方法是重命名文件,如果重命名成功,没有其他进程打开我感兴趣的文件,如下所示:

function IsFileOpenedAnywhereElseInAnyProcess(const PathName: string): Boolean;
begin
  Result := not (MoveFileEx(PathName, PathName+'.BLAH', 0) and MoveFileEx(PathName+'.BLAH', PathName, 0));
end;
Run Code Online (Sandbox Code Playgroud)

逻辑是,如果我可以重命名文件(到另一个扩展名)然后重命名它,它不会被任何其他进程打开(在检查时).

谢谢.

windows file-io file

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

getDeclaredMethods/getDeclaredFields/getConstructors的替代方案

由于在上述方法中调用了Reflection.getCallerClass,因此在调用getDeclaredMethods/getDeclaredFields/getConstructors时会收到AV.

我通过JNI从Delphi应用程序创建了一个Java VM.不幸的是,我发现在调用java.lang.Class类中的某些方法时,这些方法会调用

checkMemberAccess(1, Reflection.getCallerClass(), true);
Run Code Online (Sandbox Code Playgroud)

这导致了AV,因为堆栈上没有真正的Java类,因为我直接调用了getDeclaredXXX方法,并且来自Delphi的JNI调用.

为了克服getCallerClass,我创建了一个Java类包装器,如下所示:

public class DelphiClassHelper {

  private Field[] f;
  private Method[] m;
  private Constructor<?>[] c;
  private static DelphiClassHelper helper;

  public Field[] pGetDeclaredFields(ClassLoader cl, String ClassName) {
    Class<?> AClass = null;
    try {
        System.out.println("Loading class: "+ClassName);
        System.out.println("ClassLoader: "+cl.toString());
        AClass = cl.loadClass(ClassName);
    } catch (ClassNotFoundException e) {
        System.out.println(e.getMessage());
        e.printStackTrace();
    }  
    if (AClass!=null) {
        f = AClass.getDeclaredFields();
        return f;
    } else
        return new Field[]{};
  }

  public static Field[] GetDeclaredFields(ClassLoader cl, String ClassName) {
     helper = new DelphiClassHelper(); …
Run Code Online (Sandbox Code Playgroud)

java delphi java-native-interface

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

是否可以编写在现代浏览器(例如 Chrome、Firefox、IE、Safari)中运行的 Web 服务器?

在 Substratum 初始代币发行 (ICO) 中,白皮书讨论了通过允许主机成为网络主机来解决当前互联网的问题。

根据对白皮书的阅读,该团队似乎打算编写可在任何平台(Windows、Linux 等)上的任何现代浏览器(IE、Safari、Chrome、Firefox)上运行的 Javascript,以将其转变为 Web服务器。

由于白皮书非常笼统,我不确定该团队的 Javascript 是否也可以某种形式访问 uPnP 技术,该技术告诉最近的路由器将端口 80 转发到在 Web 服务器上运行的(假设)Web 浏览器。

熟悉当前网络浏览器的人是否知道浏览器是否能够:

  1. 提供对可以告诉路由器进行端口转发的 uPnP 的访问?
  2. 使用 Javascript 运行 Web 服务器?

谢谢你。(我熟悉一般编程,只是不熟悉当前网络浏览器的功能。请限制对网络浏览器功能的响应)

javascript browser webserver

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

Bash脚本:语法错误:意外的文件结束

我有以下文件,我在文件上有chmod a + x.当我尝试运行它时,我得到第75行:语法错误:意外的文件结束.我的脚本有什么错误?我需要做些什么来解决它?

#!/bin/sh
# log directory for ascp transfer
logdirectory=/tmp/log20079
# log for this script
baselog=$logdirectory/sent4files.log
#directory of where the files to be transferred are located
basedirectory=/tmp/test20079/

#remote host data
REMOTE_DIR=/Upload
REMOTE_HOST=xxx
REMOTE_USER=xxx
# extensions of file
FEATURE_EXT=feature
KEYART_EXT=keyart
TRAILER_EXT=trailer
METADATA_EXT=metadata

# files to be excluded, must match exclude_file_suffix
COMPLETE_EXT=complete
SENT_EXT=sent

# file to send on completion
FILE_ON_COMPLETE="$basedirectory"delivery.complete

if [ "$TYPE" == "File" ]; then
   if [ "$STARTSTOP" == "Stop" ]; then
     if [ "$STATE" == "success" ]; …
Run Code Online (Sandbox Code Playgroud)

bash

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

如何在 Bash 变量中执行命令?

如果我有一个如下所示的脚本,其中定义了一个在 CMD_VAR(变量)中运行的命令,如何在同一个 Bash 脚本中执行它?

我这样做是因为我也想将 CMD_VAR 记录到文件中。

#!/bin/sh
CMD_VAR="echo hello world >> somelogfile"
Run Code Online (Sandbox Code Playgroud)

bash

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