我需要检查是否可以传递给JVM的某个选项是显式设置还是具有默认值.
更具体一点:
我需要创建一个具有比默认堆栈大更高的本机堆栈大小的特定线程,但是如果用户希望通过指定-Xss选项来自己处理这些事情,我想创建具有默认堆栈大小的所有线程(这将由用户在-Xss选项中指定).
我检查类,如java.lang.System和java.lang.Runtime,但这些都没有给我有关的信息-Xss.
有没有办法获得我需要的信息?
我正在寻求在Windows和Linux中运行一个通用的Java程序.
该程序需要在每个平台上做一些不同的事情.
那么我的Java程序如何检测它是否应该在Linux与Windows之间运行?
在Java中,我们可以看到os.name知道底层操作系统名称的属性值:System.getProperty("os.name").
对于每个版本的Windows,它总是返回操作系统的确切名称:Windows XPXP,Windows VistaVista,Windows 7Seven,Windows 8.18.1等等......
问题是:我刚刚使用发布的Microsoft更新程序将Windows 8.1更新到Windows 10,看起来这个属性仍然存在Windows 8.1:
public class OSTest {
public static void main(String[] args) {
System.out.println(System.getProperty("os.name"));
}
}
Run Code Online (Sandbox Code Playgroud)
如何为此创建解决方法?而且,有人知道如果安装一个新的Windows 10副本这个问题是否仍然存在 - 也就是说,这个错误是由Microsoft自动更新程序引起的?
好的,我知道这System.getProperty("os.name")会给我我正在运行的操作系统的名称,但这不是很多帮助.我需要知道的是,如果我运行的操作系统是一个类似Unix的操作系统,我不关心它是HP-UX,AIX,Mac OS X还是其他什么.
从可能的os.name值列表看起来像检测"类Unix"操作系统正在检查是否一个快速和肮脏的方式os.name并没有包含的"Windows".给我的误报是操作系统,我的代码不太可能遇到!不过,如果有的话,我很想知道更好的方法.
我有一个应用程序,运行在运行Fedora或Android的几个移动设备上.为了巩固我的代码库和分发,我想确定我在哪个操作系统上.我尝试了System.getProperty("os.name"),但这只是返回"Linux".系统属性中是否有Android独有的东西?谢谢
我正在使用eclipse kepler和java SE 1.8 jdk系统库,但是当我使用任何javafx类或方法时,eclipse会发出类似的警告Access restriction: The type 'TableColumn<?,?>' is not API (restriction on required library 'C:\Program Files\Java\jdk1.8.0_05\jre\lib\ext\jfxrt.jar').
我已经尝试向系统库添加访问规则,以允许使用通配符访问库中的所有jar,*但警告仍然存在.我也使用maven建设项目.代码有效,但警告是唠叨,并且在我编码时影响可读性.任何帮助表示赞赏.
编辑:我也尝试@SuppressWarnings("restriction")在我的课程开头添加,但这仍然无法解决未知原因并隐藏我可能需要看到的所有其他限制警告
我一直在尝试使用Java IO file.delete()API 删除Windows操作系统中的文件.但是它失败并返回false.相同的代码就像Ubuntu中的魅力一样.
我已经验证该文件的权限允许程序删除它.此外,文件的所有输入和输出流都已尝试使用资源打开.
try (InputStream in = new FileInputStream(localFile); OutputStream out = new FileOutputStream(destinationFileName))
使用我已经测试过的调试器,发现在代码行中我删除了它true为以下API调用返回的文件.
file.exists()
file.canRead();
file.canWrite();
file.canExecute();
Run Code Online (Sandbox Code Playgroud)
我甚至尝试System.gc()在调用delete之前添加,以确保所有流都关闭.
不确定这是否是有用的信息,但我甚至尝试使用Apache commons FileUtils.forceDelete(file)方法,它也失败了.
那我在这里错过了什么?
更新:
通过使用Files.delete(Paths.get(file.getAbsolutePath()))我得到以下错误.
java.nio.file.FileSystemException: C:\Users\thuvvareka\Desktop\temp\in\sd.xml: The process cannot access the file because it is being used by another process.
at sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:86)
at sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:97)
at sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:102)
at sun.nio.fs.WindowsFileSystemProvider.implDelete(WindowsFileSystemProvider.java:269)
at sun.nio.fs.AbstractFileSystemProvider.delete(AbstractFileSystemProvider.java:103)
at java.nio.file.Files.delete(Files.java:1126)
at org.adroitlogic.x.transport.file.FileMessageInjector.finalizeProcessing(FileMessageInjector.java:161)
at org.adroitlogic.x.transport.file.FileMessageInjector.afterProcess(FileMessageInjector.java:123)
at org.adroitlogic.x.transport.file.FileMessageInjector.afterProcess(FileMessageInjector.java:37)
at org.adroitlogic.x.base.trp.ScheduledMessageInjector.lambda$2(ScheduledMessageInjector.java:72)
at org.adroitlogic.x.api.trp.MessageReceiver.lambda$receive$3(MessageReceiver.java:100)
at java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:760)
at java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:736)
at java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:474) …Run Code Online (Sandbox Code Playgroud) 目前我的任务是制作一个可以使用java检查链接是否正确的工具.该链接来自Jericho HTML Parser,我的工作只是检查文件是否存在/链接是否正确.那部分已经完成,困难的部分是优化它,因为我的代码运行(我不得不说)相当缓慢,每次运行65ms
public static String checkRelativeURL(String originalFileLoc, String relativeLoc){
StringBuilder sb = new StringBuilder();
String absolute = Common.relativeToAbsolute(originalFileLoc, relativeLoc); //built in function to replace the link from relative link to absolute path
sb.append(absolute);
sb.append("\t");
try {
Path path = Paths.get(absolute);
sb.append(Files.exists(path));
}catch (InvalidPathException | NullPointerException ex) {
sb.append(false);
}
sb.append("\t");
return sb.toString();
}
Run Code Online (Sandbox Code Playgroud)
在这条线上花了65毫秒
Path path = Paths.get(absolute);
sb.append(Files.exists(path));
Run Code Online (Sandbox Code Playgroud)
我试过用
File file = new File(absolute);
sb.append(file.isFile());
Run Code Online (Sandbox Code Playgroud)
它仍然在65~100ms左右运行.
那么有没有其他更快的方法来检查文件是否存在除此之外?
由于我正在处理超过70k的html文件,每毫秒计数,谢谢:(
编辑:
我尝试将所有文件列入一些List,但它并没有真正帮助,因为它只需要超过20分钟就可以列出所有文件....
我用来列出所有文件的代码
static public void listFiles2(String filepath){
Path path …Run Code Online (Sandbox Code Playgroud) 我正在尝试在Maven项目中使用Selenium的最新版本3.4.0。我使用以下依赖项导入了所有Selenium的jar:
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.4.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
问题是我无法在Eclipse中的主要方法中的以下代码中解决我项目中的任何依赖项:-
public class FirefoxTest {
public static void main(String[] args) {
FirefoxOptions options = new FirefoxOptions();
options.setBinary("C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe"); //This is the location where you have installed Firefox on your machine
FirefoxDriver driver = new FirefoxDriver(options);
driver.get("http://www.google.com");
}
}
Run Code Online (Sandbox Code Playgroud)
我想念什么?Eclipse无法将FirefoxDriver类型解析为任何依赖项。请帮忙。
我不是一名职业程序员(我所拥有的任何 Java 知识都来自 Hard Knocks 学院)。请原谅我提出的愚蠢问题,并妥善回答。
我正在开发的一个 Java 应用程序使用了非常有缺陷的与平台无关的通知(例如文件已成功下载时)。我想使用平台感知通知。在 Linux 上发出通知的代码非常简单:
import org.gnome.gtk.Gtk;
import org.gnome.notify.Notify;
import org.gnome.notify.Notification;
public class HelloWorld
{
public static void main(String[] args) {
Gtk.init(args);
Notify.init("Hello world");
Notification Hello = new Notification("Hello world!", "This is an example notification.", "dialog-information");
Hello.show();
}
}
Run Code Online (Sandbox Code Playgroud)
在 Mac 上,它有点复杂,但仍然可行:
interface NsUserNotificationsBridge extends Library {
NsUserNotificationsBridge instance = (NsUserNotificationsBridge)
Native.loadLibrary("/usr/local/lib/NsUserNotificationsBridge.dylib", NsUserNotificationsBridge.class);
public int sendNotification(String title, String subtitle, String text, int timeoffset);
}
Run Code Online (Sandbox Code Playgroud)
它需要从这个 github 存储库获取 dylib:https://github.com/petesh/OSxNotificationCenter
Windows方式是这样的:
import java.awt.*;
import java.awt.TrayIcon.MessageType; …Run Code Online (Sandbox Code Playgroud)