我没有设置java_home
,我需要知道c:\Windows\System32\java.exe
文件指向的位置.我的系统上有几个JDK和JRE.
原因是我尝试通过SSL连接到某个服务器,并且在我将证书导出到相应的JRE(我可以通过Netbeans选项看到)后,它在Netbeans中工作
但是,当我通过命令行连接时,我收到SSL错误.我尝试将证书添加到我的所有JRE中,但我无法让它工作.我认为这个Windows快捷方式指向某个我忽略的地方是一个问题.
有没有一种简单的方法可以找出哪个JRE是默认的?
[编辑]或者我需要在默认的JRE中找到默认密钥库的位置.
[编辑]我的问题详述如下:
以下两个给出了SSL错误:
"c:\Program Files\Java\jre6\bin\java.exe" -cp myjar.jar mypackage.myclass
"c:\Program Files (x86)\Java\jre6\bin\java.exe" -cp myjar.jar mypackage.myclass
Run Code Online (Sandbox Code Playgroud)
以下两项工作
"c:\Program Files\Java\jdk1.6.0_24\bin\bin\java.exe" -cp myjar.jar mypackage.myclass
"c:\Program Files (x86)\jdk1.6.0_24\bin\jre6\bin\java.exe" -cp myjar.jar mypackage.myclass
Run Code Online (Sandbox Code Playgroud)
我已使用所有四个命令导出证书:
"c:\Program Files\Java\jdk1.6.0_24\bin\bin\keytool.exe" -import -alias myalias -file mycertfile
"c:\Program Files (x86)\Java\jdk1.6.0_24\bin\bin\keytool.exe" -import -alias myalias -file mycertfile
"c:\Program Files\Java\jre6\bin\bin\keytool.exe" -import -alias myalias -file mycertfile
"c:\Program Files (x86)\Java\jre6\bin\bin\keytool.exe" -import -alias myalias -file mycertfile
Run Code Online (Sandbox Code Playgroud)
所以似乎keytool使用的是不同的商店java.exe
.
我会很感激一些帮助.
如果我定义一个Scala类:
class X(i:Int) {
println (i)
}
Run Code Online (Sandbox Code Playgroud)
如何在Java代码中使用此类?
[编辑]实际上,我的问题稍微复杂一些
我有一个抽象的课
abstract class X(i:Int) {
println (i)
def hello(s:String):Unit
}
Run Code Online (Sandbox Code Playgroud)
我需要在Java代码中使用它.是否可以轻松完成?
[EDIT2]考虑以下代码
object B {
case class C(i:Int)
}
abstract class X(i:Int) {
println (i)
def hello(a:B.C):Unit
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,以下java代码在Netbeans IDE中出错,但构建正常:
public class Y extends X {
public void hello(B.C c) {
System.out.println("here");
}
public Y(int i) {
super(i);
}
}
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
hello(B.C) in Y cannot override hello(B.C) in X; overridden method is static, final
Run Code Online (Sandbox Code Playgroud)
Netbeans 6.8,Scala 2.8.
截至目前,我认为唯一的解决方案是忽略NB错误.
这是一张显示我得到的确切错误的图片:
假设我有以下代码
def foo(x:Int):Unit = {
if (x == 1) println ("done")
else foo(scala.util.Random.nextInt(10))
}
Run Code Online (Sandbox Code Playgroud)
是否保证编译器进行尾递归优化?
如果我有
var a = Array(Array(1, 2), 3, Array(4,5,6))
Run Code Online (Sandbox Code Playgroud)
我想把它转换成
Array(1, 2, 3, 4, 5, 6)
Run Code Online (Sandbox Code Playgroud)
最简单的方法是什么?这篇文章中给出了列表的解决方案, 但它不适用于数组.
我也试过了
def flatArray(a:Array[Any])= a.map(x => x match { case ar:Array[_] => ar; case _ => Array(x) } )
Run Code Online (Sandbox Code Playgroud)
但输出是类型ArraySeq
,我无法看到如何将其转换为Array
考虑以下两个代码片段:
scala> def f1(x:Any) = x match { case i:String => i; case _ => null }
f1: (x: Any)String
scala> def f2(x:Any) = x match { case i:Int => i; case _ => null }
f2: (x: Any)Any
Run Code Online (Sandbox Code Playgroud)
为什么是f2
回归类型Any
,f1
而是String
?我期待要么返回Any
要么f2
返回Int
.
请考虑以下代码:
abstract class X {
def a:Unit
a
}
class Y extends X {
var s:String = "Hello"
def a:Unit = println ("String is "+s)
}
Run Code Online (Sandbox Code Playgroud)
这给出了以下输出:
scala> new Y
String is null
res6: Y = Y@18aeabe
Run Code Online (Sandbox Code Playgroud)
如何在调用时让父类X
等待s
初始化a
我有一个个人亚马逊帐户,我用它来做很多购物.我最近还将此帐户与AWS相关联.现在,有些人正在使用我的帐户进行亚马逊的实验.我怎样才能让他们访问管理控制台等,而不给他们我的亚马逊凭证.我不愿意分享我的亚马逊购物历史或我在亚马逊上使用的其他东西,只是EC2和S3等云服务.
他们需要的是访问完整的管理控制台以及AWS上的任何监控工具.
假设某人给了我以下源代码的Java字节码:
class MyClass {
public static void foo() {
final String bar = "Hello";
}
}
Run Code Online (Sandbox Code Playgroud)
我想扫描这个类中的所有方法MyClass
.如果任何方法包含一个final
String
被调用的变量bar
,我需要输出变量的文字值.在这种情况下,Hello
.
我设法得到bar
方法中调用的变量如下:
// Scala code
import scala.collection.JavaConversions._
import org.objectweb.asm._
import org.objectweb.asm.tree._
def processClass(is:java.io.InputStream) = {
val cn = new ClassNode
val cr = new ClassReader(is)
cr.accept(cn, 0)
is.close
val methods = cn.methods.asInstanceOf[java.util.List[MethodNode]]
val m = methods(0) // get first method as an example
val vars = m.localVariables.asInstanceOf[java.util.List[LocalVariableNode]];
val bar = vars.find(_.name == "bar").find(v …
Run Code Online (Sandbox Code Playgroud) 请考虑以下代码段:
sealed abstract class Bar
object B1 extends Bar
object B2 extends Bar
object B3 extends Bar
case class A(bar:Bar)
def foo(a:A) = a match {
case A(bar@(B1|B2)) =>
bar match { // gives warning here
case B1 =>
case B2 =>
}
case _ =>
}
Run Code Online (Sandbox Code Playgroud)
在上面,我确保第一种情况只在A
类型A(B1)
或A(B2)
(至少我认为这意味着)时匹配.但是,我收到以下错误:
warning: match may not be exhaustive.
It would fail on the following input: B3
bar match {
^
Run Code Online (Sandbox Code Playgroud)
任何人都可以详细说明警告的来临吗?
编辑:答案后,似乎编译器类型bar
为Bar
无需记住它匹配.这绝对不是一个bug.该编译器足够智能,不会发出以下警告:
sealed abstract …
Run Code Online (Sandbox Code Playgroud) 我有一个应用程序,我想确保一个方法最多同时调用一次,比如在数据库中更新用户余额时.
我正在考虑使用以下锁定机制:(显示下面的Scala代码,但应该与Java Lambdas类似):
object Foo{
val dbLocked = new java.util.concurrent.atomic.AtomicBoolean(false)
def usingAtoimcDB[T](f: => T):T = {
if (dbLocked.get) throw new Exception("db is locked")
dbLocked.set(true)
try f
finally dbLocked.set(false)
}
}
Run Code Online (Sandbox Code Playgroud)
usingAtoimcDB
可以同时调用时使用是否安全?
编辑:下面更正的代码,如下面的答案所示:
def usingAtoimcDB[T](f: => T):T = {
if(dbLocked.compareAndSet(false, true)) {
//db is now locked
try f
finally dbLocked.set(false)
} else {
//db is already locked
throw new Exception("db is locked")
}
}
Run Code Online (Sandbox Code Playgroud)
编辑2:
使用spinloop.这也行吗?
def usingAtoimcDB[T](f: => T):T = {
while (!dbLocked.compareAndSet(false, true)) {Thread.sleep(1)}
try f …
Run Code Online (Sandbox Code Playgroud) scala ×8
java ×4
scala-2.8 ×2
amazon-ec2 ×1
amazon-s3 ×1
bytecode ×1
credentials ×1
windows-7 ×1