Tag: 运行时

如何使用Googlereflection库扫描在运行时加载的JAR?

是否有配置reflection库的解决方案,以便它还扫描在运行时使用URLClassLoader添加的JAR? 现在,reflection只扫描ClassLoader中的URL。 这是我现在使用的配置: Reflections reflections = new Reflections(new ConfigurationBuilder().setUrls(ClasspathHelper.forClassLoader())); 我在reflection库的文档中找不到任何提示。 编辑:这是我加载jar文件的方式: File f = new File(“C:/Users/mkorsch/Desktop/test-reflections.jar”); URLClassLoader urlCl = new URLClassLoader(new URL[] {f.toURI().toURL()},System.class.getClassLoader());

使用Vista的管理员权限启动Java Runtime Process

我想执行一个setup.exe安装程序,它使用java 1.6在vista上安装软件。 用户不是管理员。 当我尝试启动该过程时,我收到错误消息: CreateProcess error=740 表示用户没有足够的权限启动该过程。 我可以提交一个标志或一个选项来表明,该过程应该以管理员权限执行吗? Vista本身在菜单工具栏中具有此function。 我可以在Java中使用此function吗? 我调用以下代码 Runtime rt = Runtime.getRuntime(); Process process; try { String fileToExecute = new File(mFolder, mSetupFiles[0]).getCanonicalPath(); if (logger.isDebugEnabled()) { logger.debug(“Execute runtime process”); } process = rt.exec(fileToExecute, null, mFolder); process.getErrorStream().close(); process.getInputStream().close(); process.getOutputStream().close(); if (logger.isDebugEnabled()) { logger.debug(“Wait until process is finished”); } process.waitFor(); } catch (IOException e) { […]

从java运行vbs文件

我在C:/work/selenium/chrome/有一个VBS文件test.vbs,我想从我的Java程序运行它,所以我尝试了这个,但没有运气: public void test() throws InterruptedException { Runtime rt = Runtime.getRuntime(); try { Runtime.getRuntime().exec( “C:/work/selenium/chrome/test.vbs” ); } catch( IOException e ) { e.printStackTrace(); } } 如果我尝试使用此方法运行某些exe文件,它运行良好,但是当我尝试运行VBS文件时,它说“不是有效的win32应用程序”。 知道如何从Java运行VBS文件吗?

使用java中的参数执行shell脚本

我一直在谷歌搜索,每个人似乎有一个不同的解决方案,其中没有一个似乎对我有用。 我已经尝试过ProcessBuilder和Runtime 。 两者都直接调用.sh文件并将其提供给/bin/bash 。 没有运气。 回到基础,我目前的代码如下; String cmd[] = { “~/path/to/shellscript.sh”, “foo”, “bar” }; Process p = Runtime.getRuntime().exec(cmd); 尽管手动运行,但是No such file or directory错误; ~/path/to/shellscript.sh foo bar 从bash完美运作。 我需要保留~因为这个shellcript以三种不同用户的略有不同的forms存在。

在java中以运行时递归更改系统属性

我有一个问题,并在java中搜索运行时更改系统属性的示例。 换句话说,我有一个独立的库,它将加载System.setProperty(“javax.net.ssl.trustStore”, trustStorePath) ,其中System.setProperty(“javax.net.ssl.trustStore”, trustStorePath)的值将根据条件而改变。 如果条件发生变化,那么我需要更改trustStorePath的值,并需要设置System Property。 但故事是我第一次设置值时,它存储值并使用它,即使我更改了trustStorePath的值并再次设置系统属性。 这种变化没有反映出来。 那么,我该怎么做呢。 以下是相同的示例代码段。 if (getFile(keyStorePath).exists() && isChanged ) { System.setProperty(“javax.net.ssl.keyStore”, keyStorePath); System.setProperty(“javax.net.ssl.keyStoreType”, “JKS”); System.setProperty(“javax.net.ssl.keyStorePassword”, Pwd); }else if (getFile(testMerchantKeyStorePath).exists() ) { System.setProperty(“javax.net.ssl.keyStore”, testMerchantKeyStorePath); System.setProperty(“javax.net.ssl.keyStoreType”, “JKS”); System.setProperty(“javax.net.ssl.keyStorePassword”,Pwd); }

从java通信到C ++程序

我想从java中执行外部.exe程序。 .exe是一个CLI应用程序,它在运行时接收输入(scanf())并根据输入输出。 我可以调用程序从java执行 Process p = Runtime.getRuntime().exec(“cmd /c start a.exe”); 代替 Process p = Runtime.getRuntime().exec(“cmd /c start a.exe”); 但我认为也可以从java中调用一个程序。 我用C ++编写的整个程序只需要一个用java编写的GUI。 有几点需要注意:= 1)与.exe的通信应该是运行时(不是通过main(args))2)java程序应该取输出并存储在某些变量/面板中以供将来使用3)要执行的程序可以不同(例如用户可以选择一个根本不接受任何输入的.exe。所以基本上java GUI将充当RuntimeEnv public void runEXE() { String s = null; try { Process p = Runtime.getRuntime().exec(“cmd /c a.exe”); System.exit(0); } catch (IOException e) { System.out.println(“exception happened – here’s what I know: “); e.printStackTrace(); […]

在java中编写自定义语法解释器?

我即将开始编写一个演示程序来编写我即将给出的演讲。 我想让class上的每个学生都下载这个应用程序,然后能够通过命令行以交互方式创建对象实例(及其图形表示)。 我决定用java编写,不是因为它是我最熟悉的语言,而是因为它有简单的图形类,我可以非常肯定jar会在他们的计算机上运行。 简介。 现在的问题是: 为此程序实现某些自定义命令行语法的好方法是什么? 我想使用一个简单,随意的语法,如: CREATE Monster Bob; Bob.jump(); LS Bob //to list Bob’s methods or something. LS CREATE //to list all the classes 首先,当我想到这个问题时,我会首先想到的是什么。 我可以想象我可以在树型链接中拥有一组地图。 我可以解析每个关键词作为下一个地图的关键。 因此,“CREATE Monster Bob”可以被评估为 1)搜索关键字“CREATE”的关键字映射。 返回值,该值是对类映射的引用。 2)搜索类映射关键“怪物”。 返回值,这是一个实现一些接口Leaf的工厂类,它让我知道它是一个叶子值(我将使用instanceof进行检查)。 3)也许Leaf接口将包含一个名为execute()的方法,它可以做任何想做的事情。 在这种情况下,它将创建一个Monster对象,将此对象添加到名为Objects的名为Bob的地图中。 (这个Leaf业务听起来很难看,但可以清理。) 凉。 但这句话对我来说有点困难:Bob.jump(); 1)在“Bob”中搜索一些对象图。 返回一些使用类似“evaluate(String s)”的方法实现接口的对象,并将其传递给字符串“jump()” 2)Bob搜索方法的某些内部地图“jump()”,然后……? 在c ++中,我将把键作为指向将被执行的成员函数Monster.jump()的指针。 但是我不相信java中没有函数指针这样的东西。 我已经读过你可以使用匿名类来完成这个,虽然我没有尝试过。 看起来它会起作用。 所以,这会有效,但有更优雅的方式去做吗? 我以前从未写过任何类型的翻译。 如果有人提供一些提示,我想以一种很好的方式做一些事情并在这个过程中学到一些东西。 如果我不是很结构化,这似乎是一种可能容易出错的方法,特别是当Bob和其他所有对象开始解析自己的指令和使用匿名函数时。 此外,看起来除了普通代码之外,每个类都需要一个运行时就绪的接口。 […]

在java项目中添加/修改注释

我们有一个Java代码库,我们打算在项目中使用它们。 其中一些项目需要在此库中的Java对象中添加注释(即在一个项目中,这些对象将在JAX-RS servlet实现中使用,因此需要使用JAXB,JSON等注释进行注释)。 我遇到的问题是我无法弄清楚如何在不更改原始库的情况下添加这些注释。 考虑这个例子: public class MyClass { private String field1; private int field2; } 在某些项目中,我希望课程表现得像是 public class MyClass { @Annotation1 private String field1; @Annotation2 private int field2; } 最初我想过使用单独注释的接口或派生类但无法弄清楚如何做(或者是否可能)。 我还发现了这个线程中的Javassist建议(即Java字节码操作方法),但问题是这需要在Android客户端上工作,所以它不适合我。 在这一点上,我没有想法。 如果有人能以任何方式提供帮助,我将不胜感激。 也许我错过了一些东西,或者我想要做的不是正确的方法。 无论如何,我现在需要一些指导才能继续。 首先十分感谢。

Java动态加载插件

我想创建一个可以动态加载插件的应用程序,但我没有在互联网上找到任何文献。 困难的是:我事先不知道这个名字。 例如,我有一个插件界面: public interface Plugin { public static Plugin newPlugin(); public void executePlugin(String args[]); } 这样在jar文件中实现插件的每个Class都在列表中实例化: Method method = classToLoad.getMethod (“newPlugin”); mylist.add(method.invoke(null); 第一个问题是,我不能在接口中使用静态方法。 第二个问题是,我不知道如何找到实现接口的所有类 谢谢你的帮助。

是什么导致“java.lang.IncompatibleClassChangeError:vtable stub”?

是什么导致“java.lang.IncompatibleClassChangeError:vtable stub”? 在我们的应用程序中,我们已经看到这个错误随机出现并且非常少(到目前为止只有两次,我们运行了很多)。 即使重新启动应用程序,使用相同的jvm / jar而不重建也不容易重现。 至于我们的构建过程,我们清理所有类/ jar并重建它们,因此它与其他人遇到的问题不同,他们在一个类中进行了更改并且没有重新编译其他一些依赖类。 这与IncompatibleClassChangeError相关的其他一些问题不同 – 它们都没有提到“vtable stub”。 事实上,在搜索“IncompatibleClassChangeError”vtable stub“”时,谷歌搜索结果令人惊讶。 编辑: 使用JDK 1.6.0_16。 我们没有使用Java序列化。 我们没有进行字节码操作。 如前所述,我们正在进行“干净构建”,因此之前的构建中没有遗留任何类。