Questions tagged «java»

Java是一种流行的高级编程语言。如果您在使用或理解语言本身时遇到问题,请使用此标签。这个标签很少单独使用,最常与[spring],[spring-boot],[jakarta-ee],[android],[javafx],[gradle]和[maven]结合使用。

1
如何在Java 7 java.nio.file.Path中访问子文件/文件夹?
Java 7引入了java.nio.file.Path作为java.io.File的可能替代。 使用文件,当我访问特定目录下的文件时,我将执行以下操作: File parent = new File("c:\\tmp"); File child = new File(parent, "child"); // this accesses c:\tmp\child 用Path执行此操作的方式是什么? 我以为这会工作: Path parent = Paths.get("c:\\tmp"); Path child = Paths.get(parent.toString(), "child"); 但是打电话parent.toString()似乎很丑。有没有更好的办法?
67 java  path  nio  java-7 

8
如何基于方向元数据旋转JPEG图像?
我有一些服务器代码,当上载图像时会生成缩略图。问题在于,即使在任何图像查看软件中以正确的方向显示完整尺寸的图像时,当拍摄图像并旋转相机/设备时,缩略图也会旋转。只有jpg会发生这种情况。 使用OSX上的Preview,我可以看到jpg内嵌了方向元数据。当我使用ImageTools(Grails插件)生成缩略图时,EXIF元数据不在缩略图中,这就是缩略图显示为旋转状态的原因。 通过脱机对话,我了解到虽然读取EXIF元数据相对容易,但是没有简单的写入方法,这就是为什么在生成jpg缩略图时数据会丢失的原因。 所以看来我有两个选择: 使用ImageMagick生成缩略图。缺点是它需要在我们的服务器上安装更多软件。 读取EXIF方向数据是代码并适当旋转缩略图。 有人知道其他选择吗?

12
Java ReentrantReadWriteLocks-如何安全获取写锁?
我现在在代码中使用ReentrantReadWriteLock来同步树状结构的访问。这种结构很大,可以被许多线程同时读取,偶尔对其一部分进行修改,因此似乎很适合读写习惯。我知道对于这一特定类,不能将读取锁提升为写入锁,因此根据Javadocs,必须在获得写入锁之前释放读取锁。之前,我已经在非可重入上下文中成功使用了这种模式。 但是,我发现我无法可靠地获取写锁而不会永远阻塞。由于读锁是可重入的,而我实际上是这样使用的,因此简单的代码 lock.getReadLock().unlock(); lock.getWriteLock().lock() 如果我重新获得了readlock,则可以阻止。每次解锁请求只会减少保留计数,并且只有在保留计数达到零时才实际释放锁定。 编辑以澄清这一点,因为我认为我一开始解释得不太好-我知道此类中没有内置的锁升级,并且我必须简单地释放读取锁并获得写入锁。我的问题是/不管其他线程在做什么,如果重新获得了该调用,则调用getReadLock().unlock()实际上可能不会释放该线程的锁定,在这种情况下,getWriteLock().lock()由于此线程仍在读取状态,因此对它的调用将永远阻塞锁定并因此阻止自身。 例如,即使在没有其他线程访问锁的情况下运行单线程,此代码片段也永远不会到达println语句: final ReadWriteLock lock = new ReentrantReadWriteLock(); lock.getReadLock().lock(); // In real code we would go call other methods that end up calling back and // thus locking again lock.getReadLock().lock(); // Now we do some stuff and realise we need to write so try to …

3
java.util。@ Nullable是什么意思?
我正在阅读番石榴的代码,在其中找到了java.util.@Nullable一些代码中的注释。我知道的含义@Nullable,但我不理解。特别是,我Nullable在package中找不到一个名为的类java.util。拜托,有人告诉我这是什么意思java.util.@Nullable: public static <T> java.util.@Nullable Optional<T> toJavaUtil( @Nullable Optional<T> googleOptional) { return googleOptional == null ? null : googleOptional.toJavaUtil(); }
56 java 

3
输出-1在循环中变为斜线
令人惊讶的是,以下代码输出: / -1 编码: public class LoopOutPut { public static void main(String[] args) { LoopOutPut loopOutPut = new LoopOutPut(); for (int i = 0; i < 30000; i++) { loopOutPut.test(); } } public void test() { int i = 8; while ((i -= 3) > 0) ; String value = …
54 java  string  while-loop  jvm  jit 

3
为什么Javac允许某些不可能的转换而不允许其他转换?
如果我尝试将a强制转换String为a java.util.Date,则Java编译器会捕获该错误。那么,为什么编译器不将以下内容标记为错误? List<String> strList = new ArrayList<>(); Date d = (Date) strList; 当然,JVM ClassCastException在运行时会抛出a ,但是编译器不会对其进行标记。 该行为与javac 1.8.0_212和11.0.2相同。

2
如何将异常的集合作为根本原因传递?
某种方法myMethod调用多个并行执行并等待其终止。 这些并行执行可以例外完成。因此myMethod获得一个例外列表。 我想将异常列表作为根本原因传递,但是根本原因可能只是单个异常。当然,我可以创建自己的异常来实现所需的功能,但是我想知道Java,Spring或Spring Batch是否具有类似这样的功能。
52 java  exception 

5
为什么计算复杂度为O(n ^ 4)?
int sum = 0; for(int i = 1; i < n; i++) { for(int j = 1; j < i * i; j++) { if(j % i == 0) { for(int k = 0; k < j; k++) { sum++; } } } } 我不明白当j = i,2i,3i ...时,最后一个for循环运行了n次。我想我只是不明白我们是如何根据if声明得出这个结论的。 编辑:我知道如何计算所有循环的复杂性,除了为什么最后一个循环基于mod运算符执行i次...我只是不知道它是什么。基本上,为什么j%我不能升至i * …
50 java  big-o 

5
活动onCreate中的java.util.ConcurrentModificationException
在最近的发布中,我通过Admob广告中介添加了MoPub,我在崩溃日志中看到了一堆ConcurrentModificationException。所有这些似乎都是本机代码,我使用的是与广告相关的所有最新版本以及与Google / android相关的库的最新版本。有人碰过这个吗? java.lang.RuntimeException: at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:3121) at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:3264) at android.app.servertransaction.LaunchActivityItem.execute (LaunchActivityItem.java:78) at android.app.servertransaction.TransactionExecutor.executeCallbacks (TransactionExecutor.java:108) at android.app.servertransaction.TransactionExecutor.execute (TransactionExecutor.java:68) at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1955) at android.os.Handler.dispatchMessage (Handler.java:106) at android.os.Looper.loop (Looper.java:214) at android.app.ActivityThread.main (ActivityThread.java:7078) at java.lang.reflect.Method.invoke (Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:494) at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:964) Caused by: java.util.ConcurrentModificationException: at androidx.c.g.put (SimpleArrayMap.java:482) at com.google.android.gms.measurement.internal.hs.a at …
48 java  android  admob  mopub 

3
JVM的任何编译器都使用“宽” goto吗?
我知道大多数人都知道这goto是Java语言中的保留关键字,但实际上并未使用。您可能还知道这goto是Java虚拟机(JVM)操作码。我认为所有的Java,Scala和科特林的复杂的控制流结构,在JVM的水平,使用的某种组合来实现goto和ifeq,ifle,iflt,等。 查看JVM规范https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-6.html#jvms-6.5.goto_w我看到还有一个goto_w操作码。而goto采用2字节的分支偏移量,goto_w则采用4字节的分支偏移量。规范指出 尽管goto_w指令采用4字节的分支偏移量,但其他因素将方法的大小限制为65535字节(第4.11节)。在Java虚拟机的未来版本中可能会提高此限制。 在我看来goto_w,就像其他一些*_w操作码一样,它是面向未来的。但我也goto_w想到,也许可以将两个较高有效字节清零,并将两个较低有效字节与for相同goto,并根据需要进行调整。 例如,给定以下Java Switch-Case(或Scala Match-Case): 12: lookupswitch { 112785: 48 // case "red" 3027034: 76 // case "green" 98619139: 62 // case "blue" default: 87 } 48: aload_2 49: ldc #17 // String red 51: invokevirtual #18 // Method java/lang/String.equals:(Ljava/lang/Object;)Z 54: ifeq 87 57: iconst_0 58: istore_3 59: …
47 java  jvm  goto 



3
为什么11010100 << 1等于110101000,而不是10101000?
为什么当我尝试移位11010100 2的位时,结果是110101000 2,而不是10101000 2。 int a = Integer.parseInt("11010100", 2) &lt;&lt; 1; 我尝试这样做: int a = (byte)(Integer.parseInt("11010100", 2) &lt;&lt; 1); 但是,如果输出值大于128,则一切都变为负数,这是合乎逻辑的。如何使位数不变?
40 java  bit-shift 

2
如何使用AccessibilityService在Android上执行拖动(基于X,Y鼠标坐标)?
我想知道如何在基于X,Y鼠标坐标的android上执行拖动吗?考虑两个简单的示例,Team Viewer / QuickSupport分别在远程智能手机和Windows Paint Pen上绘制“密码模式”。 我所能做的就是模拟触摸(使用dispatchGesture()和也AccessibilityNodeInfo.ACTION_CLICK)。 我找到了这些相关链接,但不知道它们是否有用: 使用AccessibilityService在屏幕上执行滑动 例子1 续手势 以下是我的工作代码,该代码用于将鼠标坐标(在PictureBox控件内部)发送到远程电话并模拟触摸。 Windows窗体应用程序: private void pictureBox1_MouseDown(object sender, MouseEventArgs e) { foreach (ListViewItem item in lvConnections.SelectedItems) { // Remote screen resolution string[] tokens = item.SubItems[5].Text.Split('x'); // Ex: 1080x1920 int xClick = (e.X * int.Parse(tokens[0].ToString())) / (pictureBox1.Size.Width); int yClick = (e.Y * …

6
包含自身作为元素的ArrayList的哈希码
我们可以发现hashcode的list是本身含有的element? 我知道这是一个坏习惯,但这就是面试官的要求。 当我运行以下代码时,它抛出StackOverflowError: public class Main { public static void main(String args[]) { ArrayList&lt;ArrayList&gt; a = new ArrayList(); a.add(a); a.hashCode(); } } 现在,我有两个问题: 为什么会有一个StackOverflowError? 是否可以通过这种方式找到哈希码?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.